[TOC]
解題報告
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1002
我的代碼在這里
題目類型
大數加法
解題思路
模擬手算加法的過程
先把字符串補齊,在較短的串前補0,這里用的是c++的string構造函數
b = string(aLen-bLen,'0')+b;
然后開始模擬加法計算的過程,以個位來說,參加計算的分別是a的個位數字ai,b的個位數字bi,進位數字ci(當然初始為0),計算得到結果di,di%10 就是結果的個位,將這個結果放在在a的個位上(反正個位算過了,閑著也是閑著~),di/10 就是十位計算時的進位數字
for(int i=numLen-1; i>=0; i--)
{
int ai = a[i]-'0';
int bi = b[i]-'0';
di = ai + bi + ci;
ci = di / 10;
a[i] = (di % 10) +'0';
}
最后的返回結果,要判一下最后是否有進位,即ci是否為0,如果不為0,說明有進位,要在結果串a前加進位‘1’
大數加法函數
整理一個大數加法的函數,不一定是最優的
string BigNumSum(string a,string b)
{
int aLen = a.length();
int bLen = b.length();
if(aLen>bLen)
{
b = string(aLen-bLen,'0')+b;
}
else
{
a = string(bLen-aLen,'0')+a;
}
int numLen = a.length();
int ci = 0;
int di = 0;
for(int i=numLen-1; i>=0; i--)
{
int ai = a[i]-'0';
int bi = b[i]-'0';
di = ai + bi + ci;
ci = di / 10;
a[i] = (di % 10) +'0';
}
return ci>0?"1"+a:a;
}
作業部落 簡書 CSDN
email : you_shoubian@163.com