加法加法。一看到加法就覺得簡單,其實不然。因為存儲長度的限制,有時候計算1234567891011121345+53616456641321345466613這種加法的時候就會出現很多意料之外的問題。隨便的丟出兩個int相加,甚至long int相加根本得不到結果。於是,需要借助其他的方式了。
我們平時自己處理這么大數的加法時都會用豎式,而且是逐個相加,滿10進1。以此為基點,我們可以聯想到運用string類來處理這些數,將他們的每一位都存儲在string中,那么長度為1000的數組就能存儲1000位的數字,這樣不就可以解決了。
// // main.cpp // yy // // Created by MadMarical on 15/11/25. // Copyright (c) 2015年 com. All rights reserved. // #include <iostream> #include <string> #include <vector> #include <algorithm> #include <stdexcept> using namespace std; #define MAXN 1000 int a[MAXN],b[MAXN]; int main(int argc, const char * argv[]) { string str1,str2;//保存輸入 long int len1,len2; long int i,j,k; int up; /*輸入流程*/ cin>>str1>>str2; /*初始化各量*/ len1 = str1.length(); len2 = str2.length(); memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); /*注意,必須倒着保存數據*/ for (i = len1 - 1, k = 0; i != -1; -- i) { a[k] = str1[i] - '0'; k++; } for (j = len2 - 1, k = 0; j != -1; -- j) { b[k] = str2[j] - '0'; k++; } for (i = 0, up = 0; i < MAXN; ++ i) { a[i] = a[i] + b[i] + up; up = a[i] / 10; a[i] %= 10; } for (i = MAXN - 1; i != -1; -- i) { if (a[i]) { break; } } for (k = i; k != -1; --k) { cout<<a[k]; } return 0; }
反思:
1.細心還是細心,不細心連幾個初始化變量為啥子要初始化成這樣都搞不明白。
2.算法的重要度可見一斑,稍微改一下思路,代碼量就陡增而且問題隨之而來。有時候,簡單一點的想法未嘗不可以嘗試。
3.牢記各模塊的知識。