专栏:PAT乙级刷题笔记
题目
输入两个非负 10 进制整数 A A A和 B ( ≤ 2 30 − 1 ) B (≤2^{ 30}-1) B(≤230−1),输出 A + B A+B A+B 的 D ( 1 < D ≤ 10 ) D (1<D≤10) D(1<D≤10)进制数。
输入格式
输入在一行中依次给出 3 个整数 A A A、 B B B 和 D D D。
输出格式
输出 A + B A+B A+B 的 D D D 进制数。
输入样例
123 456 8
输出样例
1103
分析
进制转换规则就是不断除取余数,详见百度。
输出的时候是后运算的先输出,所以用栈啦。对数据结构不了解的话数组逆序输出效果是一样的。
注意一下和为0的情况单独拎出来,要不测试点3会错。
代码
#include<iostream>
using namespace std;
int main(){
int stack[50],top = -1;//栈
int A,B,C,D;
cin>>A>>B>>D;
if((C = A + B) == 0)cout<<0;
while(C){
++top;
stack[top] = C%D;//入栈
C = C/D;
}
while(top > -1){
cout<<stack[top];
--top;//出栈
}
return 0;
}