1 条题解

  • -2
    @ 2019-04-27 21:31:17

    // 进制转换.cpp : Defines the entry point for the console application.
    //

    //#include "stdafx.h"
    #include<iostream>
    #include<cstdio>
    #include<string>
    using namespace std;

    char z[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'};

    void zhuan(int n,int m);
    long hexToDec(string source,int k);
    int getIndexOfSigns(char ch);

    int main()
    {
    // freopen( "data\Input\input8.txt","r",stdin);
    // freopen("data\Output\output8.txt","w",stdout);
    int k,r,x;
    string n,m;
    cin>>k>>m;
    cin>>r>>n;
    cin>>x;
    int x1,x2;
    x1=hexToDec(m ,k);
    x2=hexToDec(n ,r);
    int y=x1+x2;
    zhuan(y,x);
    //string ans="";
    //cin>>n>>r;
    //cout<<n<<"=";
    //zhuan(n,r);
    //printf("(base%d)",r);
    //cout<<hexToDec( "110001" ,-2)<<endl;;
    return 0;

    }
    //k进制转十进制
    long hexToDec(string source,int k)
    {
    long sum = 0;
    long t = 1;
    int i, len;
    len = source.length();
    for(i=len-1; i>=0; i--)
    {
    sum += t * getIndexOfSigns(source[i]);//*(source + i)
    t *= k;
    }

    return sum;
    }
    int getIndexOfSigns(char ch)
    {
    if(ch >= '0' && ch <= '9')
    {
    return ch - '0';
    }
    if(ch >= 'A' && ch <='J')
    {
    return ch - 'A' + 10;
    }
    //if(ch >= 'a' && ch <= 'f')
    //{
    // return ch - 'a' + 10;
    //}
    return -1;
    }
    //十进制转r进制
    void zhuan(int n,int r)
    {
    if(n==0) return ;
    int m=n%r;//m为余数
    int k=n/r;//k为商
    //如果余数小于0,转化为正数
    if(m<0)
    {
    m-=r,k++;//k++等价于商++;
    }
    //将余数转化为ascll码方便输出,省略了一个数组
    if(m>=10) m='A'+m-10;
    else m+='0';

    zhuan(k,r);

    printf("%c",m);//注意,因为结果为余数倒序,输出要写在递归后面,不然会顺序输出
    return ;
    }

  • 1

信息

ID
1032
难度
4
分类
(无)
标签
(无)
递交数
41
已通过
19
通过率
46%
被复制
5
上传者