1. 程式人生 > >計算機考研複試真題 a+b(大數加法)

計算機考研複試真題 a+b(大數加法)

題目描述

實現一個加法器,使其能夠輸出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; }