题目链接: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 }

-------------------------欢迎评论-------------------------