题目链接:Click here~~
今天无聊,把A + B Problem II用字符串做了一遍。感觉挺有成就感的,所以记录下来吧。
#include <stdio.h>
#include <string.h>
#define M 1005
//#include <stdlib.h>
//#define creat (char *)malloc(sizeof(char))
int main()
{
//char *a,*b,*f;
//a=creat; b=creat; f=creat;/*当数字位数大时会有BUG。后来直接用数组就没BUG了。不知道为什么。*/
char a[M],b[M],f[M];
int z;
scanf("%d",&z);
for(int k=1;k<=z;k++)
{
memset(f,'0',sizeof(f));
scanf("%s%s",a,b);
int i,la=strlen(a)-1,lb=strlen(b)-1;//la代表a[]的下标,lb代表b[]的下标
for(i=0;la>=0 && lb>=0;i++)
{
f[i]+=a[la--]-'0'+b[lb--]-'0';
if(f[i]>'9')
{
f[i+1]++;
f[i]=(f[i]-'0')%10+'0';
}
}
if(la>=0)
{
for(;la>=0;i++)
{
f[i]+=a[la--]-'0';
if(f[i]>'9')
{
f[i+1]++;
f[i]=(f[i]-'0')%10+'0';
}
}
}
if(lb>=0)
{
for(;lb>=0;i++)
{
f[i]+=b[lb--]-'0';
if(f[i]>'9')
{
f[i+1]++;
f[i]=(f[i]-'0')%10+'0';
}
}
}
printf("Case %d:\n%s + %s = ",k,a,b);
for(i=(f[i]=='0'?i-1:i);i>=0;i--)
printf("%c",f[i]);
printf("\n");
if(k!=z)
printf("\n");
}
return 0;
}