人类习惯用 10 进制,可能因为大多数人类有 10 根手指头,可以用于计数。这个世界上有一种叫“钱串子”(学名“蚰蜒”)的生物,有 30 只细长的手/脚,在它们的世界里,数字应该是 30 进制的。本题就请你实现钱串子世界里的加法运算。
输入格式:
输入在一行中给出两个钱串子世界里的非负整数,其间以空格分隔。
所谓“钱串子世界里的整数”是一个 30 进制的数字,其数字 0 到 9 跟人类世界的整数一致,数字 10 到 29 用小写英文字母 a 到 t 顺次表示。
输入给出的两个整数都不超过 105 位。
输出格式:
在一行中输出两个整数的和。注意结果数字不得有前导零。
输入样例:
2g50ttaq 0st9hk381
输出样例:
11feik2ir
代码示例:
#include <iostream>
using namespace std;
int main(){
string s1,s2,ans;
cin>>s1>>s2;
//统一s1和s2的长度
int len=max(s1.length(),s2.length());
while(s1.length()<len)
s1='0'+s1;
while(s2.length()<len)
s2='0'+s2;
//进行30进制加法计算
int sum,carry=0,A,B;
for(int i=len-1;i>=0;i--){
if(s1[i]>='0' && s1[i]<='9')
A=s1[i]-'0';
else
A=s1[i]-'a'+10;
if(s2[i]>='0' && s2[i]<='9')
B=s2[i]-'0';
else
B=s2[i]-'a'+10;
sum=A+B+carry;
if(sum%30<10)
ans=to_string(sum%30)+ans;
else
ans=char('a'+sum%30-10)+ans;
carry=sum/30;
}
if(carry!=0){
if(carry%30<10)
ans=to_string(carry%30)+ans;
else
ans=char('a'+carry%30-10)+ans;
}
//输出
int i=0;
while(i<ans.length() && ans[i]=='0') //找到不是0的第一个位置i
i++;
if(i==ans.length()) //如果i==ans.length(),说明ans是一串0,直接输出"0"
cout<<"0";
else
while(i<ans.length()){ //否则从i开始输出后面的所有数字
cout<<ans[i];
i++;
}
return 0;
}