1. 程式人生 > >1181: a+b(不同於第一題)

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、最高位要進一時,字串的長度要增加。