演算法提高 大數加法
阿新 • • 發佈:2018-12-12
問題描述
輸入兩個正整數a,b,輸出a+b的值。
輸入格式
兩行,第一行a,第二行b。a和b的長度均小於1000位。
輸出格式
一行,a+b的值。
樣例輸入
4 2
樣例輸出
6
#include <stdio.h> #include <string.h> #define BASE 10 #define N 2000 char a[N+1], b[N+1]; char ans[N+1]; int main(void) { int anslen, carry, len, i, j; scanf("%s", a); scanf("%s", b); memset(ans, 0, sizeof(ans)); anslen = len = strlen(a); for(i=len-1, j=0; i>=0; i--) ans[j++] = a[i] - '0'; len = strlen(b); if(len > anslen) anslen = len; carry = 0; for(i=len-1, j=0; i>=0; i--,j++) { ans[j] += b[i] - '0' + carry; carry = ans[j] / BASE; ans[j] %= BASE; } while(carry > 0) { ans[j] += carry; carry = ans[j] / BASE; ans[j++] %= BASE; } if(j > anslen) anslen = j; /* 去除前導的多個0 */ for(i=anslen-1; i>=0; i--) if(ans[i]) break; if(i < 0) i = 0; /* 輸出結果 */ for(; i>=0; i--) printf("%d", ans[i]); printf("\n"); return 0; }