描述
两个大整数相加,每一位是一个小写字母,二十六进制,a表示0,z表示25,求结果。例如:
输入:z 和 bc
输出: cb
实现
#include <iostream>
#include<cstring>
using namespace std;
int main() {
string s[2];
int l1,l2;
for(int i=0;i<2;i++){
cin>>s[i];
}
if(s[0].length()>s[1].length()){
l1=s[0].length();
l2=s[1].length();
} else{
swap(s[0],s[1]);
l1=s[1].length();
l2=s[0].length();
}
string res(s[0]);
int flag=0;//上一位数的flag
int flags=0;//当前的flag
for(int i=l2-1;i>=0;i--){
int j=l1-1-l2+1+i;
if(s[1][i]-97+s[0][j]-97>=26){
flags=1;
}
else{
flags=0;
}
if(flags==1){
if(flag==1){
res[j]=char(s[1][i]-97+s[0][j]-26+1);
}else{
res[j]=char(s[1][i]-97+s[0][j]-26);
}
}else{
if(flag==1){
res[j]=char(s[1][i]-97+s[0][j]+1);
}else{
res[j]=char(s[1][i]-97+s[0][j]);
}
}
flag=flags;
}
for(int j=l1-1-l2+1-1;j>=0;j--){
if(flag==1){
if(s[0][j]+1>=26){
flags=1;
res[j]=char(s[0][j]-26+1);
}else{
flags=0;
res[j]=char(s[0][j]+1);
}
}
flag=flags;
}
if(flag==1){
res='b'+res;
}
cout<<"res: "<<res<<endl;
return 0;
}
测试结果