【ZCMU2032】高精度加法

点击打开链接

2032: 高精度加法

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 93  Solved: 41
[Submit][Status][Web Board]

Description

问题描述
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
算法描述
由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可。

Input

输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。

Output

输出一行,表示a + b的值。

Sample Input

201001222010012212345678902010012220100122

Sample Output

20100122203011233454668012

HINT

Source

基础练习

解题思路:

1.先将字符数组倒转,使得m[0],n[0]存储个位数,m[1],n[0]存储十位数,以此类推。

2.模拟加法过程。

这里有个细节刚开始一直没注意,在倒转数组时应该-‘0’,使得字符转变为整数,再讲所得的数存入sum数组中时,又该加回‘0’,使得其变为字符。

代码:

#include<stdio.h>
#include<string.h>
int main()
{
	int la,lb,i,c=0;
	char a[101],b[101],m[101]={0},n[101]={0},sum[101]={0};
	scanf("%s",&a);
	scanf("%s",&b);
	la=strlen(a);
	lb=strlen(b);
	for(i=0;i<la;i++)m[i]=a[la-i-1]-'0';
	for(i=0;i<lb;i++)n[i]=b[lb-i-1]-'0';
	for(i=0;i<la||i<lb;i++){
		sum[i]=(m[i]+n[i]+c)%10+'0';
		c=(m[i]+n[i]+c)/10;
	}
	if(c!=0)sum[i]=(m[i]+n[i]+c)%10+'0';
	for(i=strlen(sum);sum[i]==0;i--);
	for(;i>=0;i--)printf("%c",sum[i]);
	printf("\n");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39826163/article/details/80596963