</pre><a target=_blank href="http://http://acm.hdu.edu.cn/showproblem.php?pid=1002">点击打开链接</a><pre name="code" class="cpp">
据说此题也能用链表做,它和字符串各有优缺点吧。但是俺不会。。。。
说两点注意吧:
1.字符数组和整数数组在输入,输出,计算时的区别
2用%s输出时应注意
3.采用字符串解决高精度计算的注意问题
#include<stdio.h>
#include<string.h>
char a[1005],b[1005],c[1005];
void add(char a[],char b[],char c[])
{
int i,j,k;
int len1=strlen(a);
int len2=strlen(b);
int temp=0;
//将各字符串翻转处理,转化后低位在前,高位在后
for(i=len1-1,j=len2-1,k=0;i>=0&&j>=0;i--,j--,k++)
{
temp+=a[i]-'0'+b[j]-'0'; //借位相加时+1
c[k]=temp%10+'0'; //temp有两个作用:储存和进位
temp/=10;
}
if(k<len1)
{
for(;i>=0;i--,k++)
{
temp+=a[i]-'0';
c[k]=temp%10+'0';
temp/=10;
}
}
else
{
for(;j>=0;j--,k++)
{
temp+=b[j]-'0';
c[k]=temp%10+'0';
temp/=10;
}
}
if(temp) c[k++]=temp+'0'; //判断最后是否还有进位,若有则加入C数组
c[k]='\0'; // 输出时%s遇'\0'结束 ,就是没加他,WA了好几遍。。。
for(i=0;i<k/2;i++)
{
temp=c[i];
c[i]=c[k-1-i];
c[k-1-i]=temp;
}
}
int main(void)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s%s",a,b); //以字符串形式输入两长整数
add(a,b,c);
printf("Case %d:\n",i);
printf("%s + %s = %s\n",a,b,c);
if(i!=n) printf("\n");
}
return 0;
}