編譯環境:MinGW5.1.6數組
1.大數加法函數實現思路函數
1)函數輸入:字符串形式的數字a和bspa
2)翻轉字符串a和b,這樣可使兩個數字的末位對其,利於逐位加法運算code
3)將a和b中各位相加,和賦值到字符串sum對應位中,若是有進位則sum中的下一位自增1ci
4)將字符串a、b、sum翻轉,a和b會翻轉爲它們原來的樣子,sum即數字a與b的和字符串
5)去掉sum前面多餘的0編譯
6)函數輸出:字符串形式的數字sumclass
2.函數體(包括翻轉字符串用的函數Reverse和加法函數Add)循環
///翻轉一個字符串 /* *@param char s[] 被翻轉的字符串 *@return char* 翻轉後的字符串 */ char* Reverse(char s[]) { int i = 0, j = strlen(s) - 1; char temp; while(i < strlen(s) / 2) { temp = s[i]; s[i] = s[j]; s[j] = temp; i++; j--; } return s; } ///兩個字符串表示的大數的加法運算 /* *@param char a[] 加數1 *@param char b[] 加數2 *@return char* 和 */ char* Add(char a[], char b[]) { int i, j; char* sum = new char[1001]; //翻轉數組a和b Reverse(a); Reverse(b); //兩數組共有的位 sum[0] = '0'; for(i = 0; i < strlen(a) && i < strlen(b); i++) { sum[i + 1] = '0'; sum[i + 2] = 0; sum[i] += (a[i] - '0') + (b[i] - '0'); if(sum[i] > '9') { sum[i] -= 10; sum[i + 1] ++; } } //若是a的位數比b多,考慮a的高位 if(strlen(a) > strlen(b)) { for(i = strlen(b); i < strlen(a); i++) { sum[i + 1] = '0'; sum[i + 2] = 0; sum[i] += (a[i] - '0'); if(sum[i] > '9') { sum[i] -= 10; sum[i + 1] ++; } } } //若是b的位數比a多,考慮b的高位 else if(strlen(b) > strlen(a)) { for(i = strlen(a); i < strlen(b); i++) { sum[i + 1] = '0'; sum[i + 2] = 0; sum[i] += (b[i] - '0'); if(sum[i] > '9') { sum[i] -= 10; sum[i + 1] ++; } } } //翻轉數組sum Reverse(sum); //復原數組a和b Reverse(a); Reverse(b); //去掉前面多餘的0 while(*sum == '0') { sum += 1; } return sum; }
3.函數調用程序
輸入迭代次數times。輸入兩個數a和b,程序返回a與b的和,迭代times次。
int main() { char a[1000], b[1000]; //指定循環次數 int counter, times; cin >> times; for(counter = 1; counter <= times; counter ++) { //輸入兩個數字並求和 cin >> a >> b; cout << "Case " << counter << ':' << endl; cout << a << " + " << b << " = " << Add(a, b) << endl; if(counter != times) { cout << endl; } } return 0; }
4.運行結果
END