目录
一【题目描述】
(20分)
二【题目样例】
三【解题思路】
1.短的前面补0
2.都逆转
3.相加,注意进位
4.再翻转 去掉最前面的0
全0时没考虑
四【代码实现】
17分
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
//1.短的前面补0
//2.都逆转
//3.再翻转 去掉最前面的0
char m[31] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e',
'f','g','h','i','j','k','l','m','n','o','p','q','r','s','t'};
int main(){
string a,b;
cin>>a>>b;
int lena=a.size();
int lenb=b.size();
if(lena>lenb){
string s;
for(int i=0;i<lena-lenb;i++) s+='0';
b=s+b;
}
else{
string s;
for(int i=0;i<lenb-lena;i++) s+='0';
a=s+a;
}
//-------------------------------------
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int up=0;//进位
string res="";//结果字符串
for(int i=0;i<a.size();i++){
int x1,x2;
for(int j=0;j<31;j++){ //找匹配项,变成30以内整数
if(m[j]==a[i]) x1=j;
if(m[j]==b[i]) x2=j;
}
int sum=up+x1+x2;
if(sum>=30){
up=1;
sum=sum-30;
}
else up=0;
res+=m[sum];
}
reverse(res.begin(),res.end());
int index;
for(int i=0;i<res.size();i++){
if(res[i]!='0') {
index=i;
break;
}
}
res.substr(index,res.size()+1);
cout<<res;
}