解析:
1.注意20进制的字符数字转换;
2.注意字符开头的“0”得屏蔽掉,例如“001+002=3”;
3.注意类似 “jj+jj=1ji”的问题;
4.最坑的一个数据 0+0=0;
代码:
#include#include #include #include #include #define MIN(a,b) (a b a:b) using namespace std; char str1[110], str2[110]; int num1[110], num2[110], num[110]; int main(){ int i, j; int len1, len2, len; int flag; while(~scanf(%s%s, str1, str2)){ memset(num1, 0, sizeof(num1)); memset(num2, 0, sizeof(num2)); memset(num, 0, sizeof(num)); len1 = strlen(str1); len2 = strlen(str2); len = MAX(len1, len2); /*转换为20进制*/ for(i=0; i ='0'&&str1[i]<='9') num1[len1-i] = str1[i]-'0'; else num1[len1-i] = str1[i]-'a'+10; } for(i=0; i ='0'&&str2[i]<='9') num2[len2-i] = str2[i]-'0'; else num2[len2-i] = str2[i]-'a'+10; } /*相加*/ for(i=1; i<=len+1; ++i){ num[i] = num[i-1]/20+num1[i]+num2[i]; num[i-1] = num[i-1]%20; } for(i=len+1; i>1; --i) if(num[i]) break; for (j=i; j>0; --j){ if(num[j]>9) printf(%c, num[j]-10+'a'); else printf(%d, num[j]); } printf( ); } return 0; }