题目
输入两个非负10进制整数A和B(<=2^30-1),输出A+B的D (1 < D <= 10)进制数。
输入格式
输入在一行中依次给出3个整数A、B和D。
输出格式
输出A+B的D进制数。
输入样例
123 456 8
输出样例
1103
来源:PAT 乙 1022 D进制的A+B
——————————————————————
思路(注意事项)
1.若输出结果用整型定义,则忽略了:输出结果如果用低位进制(如2进制)表示,可能会越界的情况,导致测试点2和4有误。
2.若输出结果用字符串表示,则要单独考虑(A+B=0)的情况,否则测试点3有误。
想到以下两种解↓
——————————————————————
题解1(字符串+反转)
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i, a, n) for(int i = a; i < n; i++)
int main()
{int a, b, d; // a = A,b = B,d = D.string c; //c为输出结果cin >> a >> b >> d;int sum = a + b;//和为0,输出 if(sum == 0){cout << 0;return 0; }//计算A+B的D进制数 while(sum != 0){c += to_string(sum % d) ;sum /= d;}//和不为0,输出 reverse(c.begin(), c.end());cout << c << endl;return 0;
}
题解2(栈)
#include<iostream>
#include<stack>
using namespace std;
#define rep(i, a, n) for(int i = a; i < n; i++)
int main()
{int a, b, d; // a = A,b = B,d = D.stack<int>st; //定义栈cin >> a >> b >> d;int sum = a + b;//和为0,输出 if(sum == 0){cout << 0;return 0; }//计算A+B的D进制数,压栈while(sum != 0){st.push(sum % d);sum /= d;}//和不为0,输出 while(!st.empty()){cout << st.top();st.pop();}return 0;
}