1181: a+b(不同於第一題)
阿新 • • 發佈:2019-02-14
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、最高位要進一時,字串的長度要增加。