【 OJ 】 HDOJ1047 18年12月15日21:00 [ 41 ]
阿新 • • 發佈:2018-12-23
思路大數相加,輸入一系列大數,只需要不停的計算結果+輸入大數就可,因此就是求2個大數相加
9+9=18,可知最多進位一個....
//簡單的大數相加 # include<iostream> # include<string> using namespace std; string result, temp; string add(string a,string b) { if (a[0] == '0')return b; int alen = a.length(); int blen = b.length(); if (alen < blen) return add(b, a); reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); //確保a>b int s=0,c=0,index=0; int aindex, bindex;//僅僅為了好監聽... while (index < blen) { aindex = a[index]-'0'; bindex = b[index]-'0'; s = aindex + bindex+c; a[index++] = (s % 10)+'0'; c = s / 10; } while (c) { if (index < alen) {//無需進位 aindex = a[index] - '0'; s = aindex + c; a[index++] = (s % 10) + '0'; c = s / 10; } else {//該進位一次 char cc = c + '0'; a += cc; c /= 10; }//9+9=18 最多一個進位 } reverse(a.begin(), a.end()); return a; } int main(void) { int T; cin >> T; while (T--) { result = "0"; cin >> temp; while (temp[0] != '0') { result = add(result, temp); cin >> temp; } cout << result << endl; if (T) cout << endl; } system("pause"); return 0; }