[TOC]
解題報(bào)告
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1002
我的代碼在這里
題目類型
大數(shù)加法
解題思路
模擬手算加法的過程
先把字符串補(bǔ)齊枪汪,在較短的串前補(bǔ)0,這里用的是c++的string構(gòu)造函數(shù)
b = string(aLen-bLen,'0')+b;
然后開始模擬加法計(jì)算的過程轰胁,以個(gè)位來說斩箫,參加計(jì)算的分別是a的個(gè)位數(shù)字ai,b的個(gè)位數(shù)字bi,進(jìn)位數(shù)字ci(當(dāng)然初始為0),計(jì)算得到結(jié)果di,di%10 就是結(jié)果的個(gè)位,將這個(gè)結(jié)果放在在a的個(gè)位上(反正個(gè)位算過了,閑著也是閑著~)梁钾,di/10 就是十位計(jì)算時(shí)的進(jìn)位數(shù)字
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';
}
最后的返回結(jié)果,要判一下最后是否有進(jìn)位逊抡,即ci是否為0姆泻,如果不為0,說明有進(jìn)位,要在結(jié)果串a(chǎn)前加進(jìn)位‘1’
大數(shù)加法函數(shù)
整理一個(gè)大數(shù)加法的函數(shù)冒嫡,不一定是最優(yōu)的
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;
}
作業(yè)部落 簡(jiǎn)書 CSDN
email : you_shoubian@163.com