【PAT乙级】D进制的A + B

正文索引 [隐藏]

题目描述:

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

输入描述:

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

输出描述:

输出A + B的D进制数。

输入样例:

123 456 8

输出样例:

1103

解题思路:

采用堆栈求解,先令C = A + B如果C等于0,就直接输出0,否则对C进行进制转换。把C对D的余数推入栈中,然后C除以D的值赋给C,最后根据堆栈“后进先出”的规则输出C对D的余数,也就得到了D进制下的C。

AC代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a,b,d;
    cin >> a >> b >> d;
    stack<int> s;
    int c = a+b;
    if(c == 0)
    {
        cout << 0;
    }
    while(c!=0)
    {
        s.push(c%d);
        c /= d;
    }
    while(!s.empty())
    {
        cout << s.top();
        s.pop();
    }
    return 0;
}