[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
网友评论