本題參考了演算法筆記的大數運算
簡單解決
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <cstdio> #include <cstring> #include <iostream> using namespace std; void print(int a[200]){ int i=200-1; // 要印的數字位置 while(i>=0 && a[i]==0) i--; // 數字開頭的零都不印 if(i<0)cout << '0'; else while(i>=0) cout << a[i--]; } // c = a + b; void add(int a[200], int b[200], int c[200]) { for (int i=0; i<200; i++) // 對應的位數相加 c[i] = a[i] + b[i]; for (int i=0; i<200-1; i++) // 一口氣進位 { c[i+1] += c[i] / 10; // 進位 c[i] %= 10; // 進位後餘下的數 } } char input[200]={'\0'}; int a[200],c[200]; int main(){ while(1){ gets(input); if(input[0]=='0'){ print(c); printf("\n"); //本題需要留一個換行 break; } int len = strlen(input); for(int i=0;i<len;i++){ a[i]=input[len-i-1]-48; } add(a,c,c); for(int i=0;i<200;i++)a[i]=0; } return 0; }
沒有留言:
發佈留言