对于处理较大整数范围的数据时,会超出数据类型的存储范围造成数据溢出,所以对于大整数的运算我们借用的 竖式计算的思想 去实现
例如 计算 12345+ 123456789的和
在输入数字是可以采用使用字符串的输入形式,倒着计算每一位的和,当要进位时,在本位利用取余操作存到下一次加法过程中
输入与存储
# include <stdio.h>
# include <string.h>
# define MAXLEN 210 //改变位数
int main()
{
int a[MAXLEN]={0},b[MAXLEN]={0},c[MAXLEN]={0};
char s1[MAXLEN],s2[MAXLEN];
int l1=0,l2=0,na=0,nb=0,nc=0,j=0,i=0,k=0;
//
scanf("%s%s",s1,s2);
l1= strlen(s1); //计算位数
l2= strlen(s2);
for(i=0;i<l1;i++)
{
a[i]=s1[l1-1-i]-'0';
}
na=l1;
for(i=0;i<l2;i++)
{
b[i]=s2[l2-1-i]-'0';
}
nb=l2;
求解
//计算c = a + b
nc=na>nb?na:nb;
for(i=0;i<nc;i++)
{
c[i]=c[i]+a[i]+b[i];
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
nc++;// 保证位数充足
消除对输入前导0的影响
//消除前导0
while(c[nc-1]==0)
{
if(nc==1)
break;
nc--;
}
输出c的值
//输出c的值
for(i=nc-1;i>=0;i--)
{
printf("%d",c[i]);
}
printf("\n");
return 0;