题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2100
题意:两个26进制数相加
思路:大数模拟(刚开始被题误导 利用进制转化做的WA,后来发现26进制数不超过200,即最大的26进制数有200位,若是转化为10进制会超出long long)
注意:A为0
代码:
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<string> 5 6 using namespace std; 7 8 int main() 9 { 10 char a[210],b[210]; 11 while(scanf("%s%s",a,b)!=EOF) 12 { 13 int i,d=0,s=0; 14 char a1[210],b1[210]; 15 for(i=strlen(a)-1;i>=0;i--) //尾部掐齐便于加和运算 16 a1[d++]=a[i]; 17 for(i=strlen(b)-1;i>=0;i--) 18 b1[s++]=b[i]; 19 if(d>=s) 20 { 21 for(i=s;i<d;i++) //位数小的用‘A’补位 22 b1[i]='A'; 23 } 24 else 25 { 26 for(i=d;i<s;i++) 27 a1[i]='A'; 28 int t=d; 29 d=s; 30 s=t; 31 } 32 int fg=0; 33 for(i=0;i<d;i++) 34 { 35 int t=a1[i]-'A'+b1[i]-'A'+fg; 36 fg=t/26; 37 a1[i]=t%26+'A'; 38 } 39 if(fg) 40 { 41 a1[i++]=fg+'A'; 42 } 43 fg=0; 44 for(i=i-1;i>=0;i--) 45 { 46 if(a1[i]=='A'&&!fg&&i!=0) //去掉前导0,即‘A’ 47 continue; 48 if(a1[i]!='A') 49 fg=1; 50 printf("%c",a1[i]); 51 } 52 printf("\n"); 53 } 54 55 return 0; 56 }
-------------------------欢迎评论-------------------------