#include <bits/stdc++.h>
using namespace std;
int main() {
// 输入A、B、D得到十进制结果C
int A, B, D, C;
cin >> A >> B >> D;
C = A + B;
string ans;
// 除基取余法 十进制转换为D进制 向高位插入余数
do{
ans.insert(0, 1, C % D + '0');
C /= D;
}while(C);
cout << ans;
}
#include <bits/stdc++.h>
using namespace std;
int A, B, D;
void process(int n){
// 递归边界
if(n / D == 0)
cout << n;
else{
// 递归式
process(n / D);
cout << n % D;
}
}
int main() {
cin >> A >> B >> D;
process(A + B);
}
process(n / D);
cout << n % D;
参考代码里面用了递归的方法,除基取余法的顺序是从低位向高位处理,而输出的时候是从高位向低位输出。递归的时候就是低位不断向高位递归处理,而当最后达到边界的时候一步步返回上一个函数,那么反过来的顺序刚好是高位向低位输出。所以在递归的函数后面放一个cout取余数输出。
// 补充\0
// ans.insert(ans.size(), 1, '\0');
本来最后面手动补充了结束字符,但发现不补充也可以直接输出,不知道是不是 string 类型自动将末尾设置为‘\0’了。