知识点:进制的转换
题目描述
输入两个非负10进制整数A和B<=2^30-1,输出A+B的D (1 < D <= 10)进制数。 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB
输入描述:
输入在一行中依次给出3个整数A、B和D。
输出描述:
输出A+B的D进制数。
输入例子:
123 456 8
输出例子:
1103
算法思路:
看到题目,首先注意到A+B<=2^31-2,所以本题我们可以用int来存储A+B,然后本题就是简单的进制转换,这里用的是除m取余,即将一个数n转换为m进制,只需将n迭代求n%m余数即为结果的最低位,次最低位…以此类推,同时迭代的结束标志即(n=n/m)==0,即可得出结果。
举个例子,将十进制的10转换为二进制,手算相信大家都会,那过程是怎样的?模拟过程如下:
n n%2余数 n/m
10 0 5
5 1 2
2 0 1
1 1 0(结束)
所以结果为 ==> 1010
代码实现:
#include<iostream>
#include<stdio.h>
using namespace std;
int main(int argc, char** argv){
int a,b,d;
cin >> a >> b >> d;
//res用于保存结果
string res = "";
int r = a+b;
//核心逻辑,如上述算法思路所述
while(r > 0){
res = (char((r%d) + '0'))+res;
r /= d;
}
cout << res << endl;
return 0;
}