1181: a+b(不同于第一题)

Description

求a+b的值

Input

第一行一个整数T,表示接下来有T行

每行两个整数是a,b,(0<=a,b<=10^10000)

Output

输出值

#include <stdio.h>
#include <string.h>
char s1[10100];
char s2[10100];
int a[10100];
int b[10100];
int main()
{
	int pp;scanf("%d",&pp);
	while (pp--)
	{
		scanf("%s%s",s1,s2);
		int l1 = strlen(s1);
		int l2 = strlen(s2);
		int len;
		if (l1 > l2) //比较字符串的长度来进行加法
			len = l1;
		else 
			len = l2;
	//for (int i = 0 ; i <= len ; i++)
		//a[i] = b[i] = 0;
		memset(a,0,sizeof(a));//要将数组a,b清零
		memset(b,0,sizeof(b));	
		
		for (int i = l1 - 1 ; i >= 0 ; i--)
			a[l1 - i - 1] = s1[i] - '0';
		for (int i = l2 - 1 ; i >= 0 ; i--)
			b[l2 - i - 1] = s2[i] - '0';
		
		for (int i = 0 ; i < len ; i++)
		{
			a[i] = a[i] + b[i];
			a[i+1]+= a[i] / 10;
			a[i] = a[i] % 10;
		}
		if (a[len] != 0) len++;//若位数增加,那么字符串的长度增加。
		
		for (int i = len - 1 ;i >= 0 ;i--)
			printf("%d",a[i]);
		printf("\n");
	}
	return 0;
}

 高精度加法计算:

1、因为是高精度,所以数字很大,要用字符串进行储存。

2、要进行计算,一般是从末尾进行的,所以要在字符串转化为整型数组的同时,要将顺序改变。

3、加法会有进位,所以利用每次前一为加10,后一位取余的规律进行计算。

4、最后输出的时候要记得倒过来输出。

注意点:

1、利用头文件#<string.h>测量字符串的长度以确定位数

2、要对a,b数组清零,以便进位。

3、最高位要进一时,字符串的长度要增加。

猜你喜欢

转载自blog.csdn.net/xx1257gd/article/details/81138461