1022 D进制的A+B

1022 D进制的A+B (20分)  

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

输入格式:

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

输出格式:

输出 A+B 的 D 进制数。

输入样例:

123 456 8
 

输出样例:

1103

 

    这道题最好用STL中的<stack>,利用栈的先进后出的特性,我刚开始用的<vector>,但是有两个测试点段错误,然后改用<stack>,提交后就只有一个测试点答案错误,
然后调试的时候发现当输入的前两个数都是0的时候,什么都没输出,原因是因为0加0还是0,0对任何数取余还是0,所以就没有东西进栈,栈是空的,所以要做个特殊处理。

 1 #include<iostream>
 2 #include<stack>
 3 using namespace std;
 4 int main()
 5 {
 6     int A,B,D;
 7     int result;
 8     stack<int> v;
 9     cin>>A>>B>>D;
10     if(A==0&&B==0)
11     {
12         cout<<'0';
13         return 0;
14     }
15     result=A+B;
16     while(result) //商不为0,余数
17     {
18         v.push(result%D); //余数入栈
19         result/=D;
20     }
21     while(!v.empty()) //空栈返回1,非空栈返回0
22     {
23         cout<<v.top();
24         v.pop();
25     }
26     return 0;
27 }

ac了

1022 D进制的A+B

 

上一篇:2021-11-13


下一篇:5.1树的定义