面試題17_1:實現兩個大數相加
阿新 • • 發佈:2020-07-22
本題考查大數問題。大數一般用字串或者陣列表示。注意,strlen()函式返回的值是陣列'\0'前元素的個數,並不包括'\0'。
C++版本
#include <iostream> #include <algorithm> #include <cstring> using namespace std; void printNumber(char number[]){ bool isBeginning0 = true; int nLength = strlen(number); for(int i = 0; i < nLength; i++){ if(isBeginning0 && number[i] != '0') isBeginning0 = false; if(!isBeginning0) printf("%c", number[i]); } printf("\t"); } // 實現兩個大數相加,結果記入到a[] bool addBigInt(char a[], char b[], int arraySize){ bool isOverFlow = false; // 第n個進位 int nTakeOver = 0; for(int i = arraySize-1; i>=0; i--){ int nSum = (a[i]-'0') + (b[i]-'0') + nTakeOver; // 如果產生進位 if(nSum > 9){ // 如果是首位產生了進位,那麼溢位 if(i == 0) isOverFlow = true; else{ a[i] = '0' + nSum - 10; nTakeOver = 1; } } // 如果沒有產生進位,這裡不會break; else{ a[i] = '0' + nSum; nTakeOver = 0; } } return isOverFlow; } int main() { char a[8] = {'1','6','3','5','3','5','4','\0'}; char b[8] = {'0','0','4','3','2','6','3','\0'}; cout<<strlen(a)<<endl; if(!addBigInt(a, b, strlen(a))) printNumber(a); return 0; }