美文网首页
1022 D进制的A+B

1022 D进制的A+B

作者: 初见还是重逢 | 来源:发表于2019-03-08 20:22 被阅读0次

    输入两个非负 10 进制整数 A 和 B (≤2^30 −1),输出 A+B 的 D (1<D≤10)进制数。

    输入格式:

    输入在一行中依次给出 3 个整数 A、B 和 D。

    输出格式:

    输出 A+B 的 D 进制数。

    输入样例:

    123 456 8

    输出样例:

    1103

    思路:

    本题难度不大,主要是需要定义一个函数对十进制数进行转化,对十进制数转化的方法为对其进行求余运算,例如将56转化为7进制数,计算方法为:

    56/7=8···0
    8/7=1···1
    1/7=0···1
    直到除数结果为0,逆序记录余数,110即为56的7进制数

    程序如下:

    string tentoD(int number, int D)//根据进制数D将10进制数字转化为字符串
    {
        if (number == 0) return "0";//本题有一个注意点是A,B都为0的情况要予以考虑,有一个测试用例就是对0的结果的输出
        vector<int> s;
        string n;
        while (number != 0)//进制数的转化,记录余数
        {
            s.push_back(number%D);
            number /= D;
        }
        int temp;
        while (!s.empty())
        {
            temp = *(s.end() - 1);//取最后一位数字,逆序即为转换后的字符串
            n +='0' + temp;
            s.pop_back();
        }
        return n;
    }
    

    定义好函数直接计算加和结果通过函数转化一下进制数即可。

    注意本题有一个测试用例是A,B都为0,需要在函数中对0的情况加以考虑

    另外,附上将D进制字符串转化为10进制数的方法:

    //本函数需要include<stringstream>与<cmath>
    int Dtoten(string a, int D)//字符串a是D进制数,需要将其转化为10进制数
    {
        int number=0;
        for (int i = 0; i < a.size(); i++)
        {
            number += (a[i]-'0') * pow(D, a.size() - 1 - i);
        }
        return number;
    }
    

    代码:

    D进制的A+B

    //1022  D进制的A+B
    //本题有一个注意点是A,B都为0的情况要予以考虑,有一个测试用例就是对0的结果的输出
    #include<iostream>
    #include<string>
    #include<vector>
    #include<cmath>
    
    using namespace std;
    
    string tentoD(int number, int D)//根据进制数D将10进制数字转化为字符串
    {
        if (number == 0) return "0";
        vector<int> s;
        string n;
        while (number != 0)//进制数的转化,记录余数
        {
            s.push_back(number%D);
            number /= D;
        }
        int temp;
        while (!s.empty())
        {
            temp = *(s.end() - 1);//取最后一位数字,逆序即为转换后的字符串
            n+='0' + temp;
            s.pop_back();
        }
        return n;
    }
    
    int Dtoten(string a, int D)//将D进制的字符串a转化为10进制的整型
    {
        int number=0;
        for (int i = 0; i < a.size(); i++)
        {
    
            number += (a[i]-'0') * pow(D, a.size() - 1 - i);
        }
        return number;
    }
    
    int main()
    {
        int A, B;
        int D;
        cin >> A >> B >> D;
        int temp;
        temp = A + B;
        cout << tentoD(temp, D);
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:1022 D进制的A+B

          本文链接:https://www.haomeiwen.com/subject/cgpdpqtx.html