题目链接
题目描述
输入两个非负 10 进制整数 A 和 B (≤2
30
−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
题目大意
给你两个数A B
让你把A+B
的结果转换为D
进制数输出
解题思路
本题要注意的点比较多
- 首先是
a b
的范围,为≤2^30−1
,这也就说明a+b
一定不会超出int
的范围,当然读者也可以直接用long long
,直接避免范围判断 - 然后就是进制转换的问题,由十进制数
n
转化为d进制
,只需要将n
不断的除以d
并将余数保存,得到的余数序列再翻转一下就是d进制数
(如题目中最后得到的序列其实是3011,需要我们从后往前看1103才是最后的结果) - to_string函数的运用可以看【经验】关于c++11中string类型字符串和整形相互转化的用法
- 关于测试点3,是要我们对
A+B=0
这种特殊情况进行判断
题解
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
int d;
int y;
string s;
cin>>a>>b>>d;
a+=b;
if(a==0){
//测试点3 a+b=0
cout<<"0";
return 0;
//这里return 0 代表直接结束代码运行,后面的代码就不会执行了
}
while(a!=0){
s=s+to_string(a%d);
//注意只能通过这种方式拼接string类型字符串,而不能拼接char类型字符
//利用了拼接字符串的特性,两个字符串可以直接相加,to_string函数前面也是提到过
a/=d;
}
reverse(s.begin(),s.end());
//翻转序列
cout<<s;
}