C语言编程题系列:大数加法
大数加法用于求多位数据相加,因为数据位太多,一般数据类型无法储存,导致无法操作,因此,需要用数组来存储操作数的数据位,其中有几个问题需要特别注意。
1.存数据的数组要用字符串而不是int型数组,因为一个数组元素只存一位数
2.两数相加时应该倒叙相加,因为输入是从高位输入而计算是从个位开始,例如123+45,输入是123 回车 45 ,但计算是3+5再2+4这样的
3.要注意进位问题,并且注意每一位只存一个,所以如果有进位要利用取余
4. 因为有倒叙操作,在本题解给出的例子中数据的顺序为:正序输入,倒叙操作,正序输出
综上所述,程序大致思路为:
- 用字符串存储数据
- 将字符串转换为int型进行操作
- 用第三个数组存储结果
- 输出结果
程序如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char a[1001]={0},b[1001]={0};
int c[1001]={0},d[1001]={0},x[1001]={0};
int i,j,k=0,t=0,max,m,n;
scanf("%s%s",a,b);//先用 字符串 将 操作数 输入
for(i=0,j=strlen(a)-1;j>=0;i++,j--)//将 char转换成 int
{
c[i]=a[j]-'0';
}
for(i=0,j=strlen(b)-1;j>=0;i++,j--)
{
d[i]=b[j]-'0';
}
if(strlen(a)>strlen(b))//找出 较大的数 作为 两数之和 的长度
max=strlen(a);
else
max=strlen(b);
for(i=0;i<max;i++)
{
t=c[i]+d[i]+t; //后面的 t 是 两数之和 的进位,第一次运行时为 0
x[k]=t%10; // x数组 是 结果 , 每次循环 取 结果的低位(因为可能进位,只取一位)
k++;
t=t/10; //t此时又作为余数
}
x[k]=t; //由于进位 导致 最后可能多出一位
if(x[k]!=0) //判断上一步多出的 最后一位 是否为0, 不是就输出
printf("%d",x[k]);
for(i=k-1;i>=0;i--) //倒叙输出后面几位
{
printf("%d",x[i]);
}
return 0;
}
//******************* 结束 **********************