整形的范围有限,计算的数字不能满足现实中遇到的一些”大数“;
解决办法是将数字存到数组中,在数组中对应运算最后取出即可;
下面代码:
#include <stdio.h>
#include <string.h>
int add(int *a,int *b)
{
int i,h=0;
for(i=0;i<200;i++)
{
a[i]+=b[i];
if(a[i]>=10)
{
a[i]-=10; //相加大于十就进位
a[i+1]++;
}
if(a[i]) h=i;//保留位数
}
return h;
}
int main()
{
int i,j;
char c[200],d[200]; //定义两个字符数组
while(scanf("%s%s",c,d)!=EOF)
{
int a[200]={0},b[200]={0};
int clen=strlen(c),dlen=strlen(d);
for(i=clen-1,j=0;i>=0;i--) //字符数组转换为整数数组
a[j++]=c[i]-'0';
for(i=dlen-1,j=0;i>=0;i--) //字符数组转换为整数数组
b[j++]=d[i]-'0';
int h=add(a,b);
for(i=h;i>=0;i--)
printf("%d",a[i]);
}
return 0;
}