計算機考研複試真題 a+b(大數加法)
阿新 • • 發佈:2018-11-12
題目描述
實現一個加法器,使其能夠輸出a+b的值。輸入描述:
輸入包括兩個數a和b,其中a和b的位數不超過1000位。
輸出描述:
可能有多組測試資料,對於每組資料, 輸出a+b的值。示例1
輸入
2 6 10000000000000000000 10000000000000000000000000000000
輸出
8 10000000000010000000000000000000
/* 程式設計思路:屬於大數相加題型,一種典型解題步驟: 1、從結尾開始每位相加 2、兩個整數長度不相等(肯定有一個已經加完了,再把沒有加完的加上去) 3、最高位有進位,要再進一位 4、結果字串逆序*/ #include<iostream> #include<string> #include<algorithm> using namespace std; string BigNumAdd(const string& strNum1, const string& strNum2) { string strSum; int len1 = strNum1.size()-1; int len2 = strNum2.size()-1; int bit = 0; //儲存進位//從結尾開始每位相加 while (len1>=0 && len2>=0) { //求每位的和(要把進位也加上) int tmpSum = strNum1[len1]-'0' + strNum2[len2]-'0' + bit; //儲存進位結果 strSum += tmpSum % 10 + '0'; //求進位 bit = tmpSum / 10; --len1; --len2; } //兩個整數長度不相等(肯定有一個已經加完了,不需要再額外加if來判斷,因為while就可以判斷)while (len1 >= 0) { //和上個while迴圈一樣 int tmpSum = strNum1[len1]-'0' + bit; strSum += tmpSum % 10 + '0'; bit = tmpSum / 10; --len1; } while (len2 >= 0) { //和上個while迴圈一樣 int tmpSum = strNum2[len2]-'0' + bit; strSum += tmpSum % 10 + '0'; bit = tmpSum / 10; --len2; } //最高位有進位 if (bit != 0) strSum += bit + '0'; //反轉 reverse(strSum.begin(), strSum.end()); return strSum; } int main(){ string num1,num2; while(cin>>num1>>num2){ cout<<BigNumAdd(num1,num2)<<endl; } return 0; }