1.题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2100
2.说明:
两个大数相加的另类题目。
3.参考代码:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[1000],str2[1000];
int a[1000],b[1000],c[2000];
int i,j,k,flag;
char ch;
int l1,l2,maxlen;
while(~scanf("%s %s",str1,str2))
{
memset(a,0,sizeof(a)); ///初始化
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
l1=strlen(str1);
l2=strlen(str2);
maxlen=l1>l2?l1:l2; ///取最大的长度
flag=0;
k=0;
for(i=l1-1;i>=0;i--) ///记得逆序
a[k++]=str1[i]-65;
k=0;
for(i=l2-1;i>=0;i--) ///记得逆序
b[k++]=str2[i]-65;
for(i=0;i<maxlen;i++)
{
c[i]+=(a[i]+b[i]); ///相加
if(c[i]>25) ///进位思想
{
c[i+1]++;
c[i]%=26;
}
}
i=2000;
while(i--)
{
if(c[i])
break;
}
for(;i>=0;i--)
{
for(j=0;j<=25;j++)
{
if(c[i]==j)
{
flag=1;
ch=j+65;
printf("%c",ch);
}
}
}
if(flag==0) ///如果2个全是A,则结果为一个A
printf("A");
printf("\n");
}
return 0;
}