题解 | #大数加法#
大数加法
http://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
下面贴出了可以在本机环境下运行的代码
对于本题,其实利用了最基本的加减法原理,每一位加每一位,然后判断是否产生进位,如果产生进位就在下一位的相加过程中加入进位影响,且当前位加法结果减去10;
由于字符串长度不一,suo'yi本题循环中,循环次数为最大的字符串长度,通过比较和置换,将t变为恒最大的;
本题利用了t当作中间变量,因为会发生结果比t的长度大1,所以最后还需要判断是否存在高位进位,如果是,高位补1。
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
string s,t,temp;
cin>>s>>t;
int jinwei=0;
if(s.length()>t.length())
{
temp=t;
t=s;
s=temp;
}
int slen=s.length()-1;
for(int i=t.length()-1;i>=0;i--)
{
if(slen>=0) //较小串未算完
{
if(t[i]+s[slen]+jinwei-10-'0'>='0')
{
//进位
t[i]=t[i]+s[slen--]+jinwei-10-'0';
jinwei=1;
if(slen<0)
continue;
}
else
{
t[i]=t[i]+s[slen--]+jinwei-'0';
jinwei=0;
if(slen<0)
continue;
}
}
else //较小串已算完
{
if(t[i]+jinwei-10>='0')
{
//进位
t[i]=t[i]+jinwei-10;
jinwei=1;
}
else
{
t[i]=t[i]+jinwei;
jinwei=0;
}
}
}
if(jinwei==1)
t="1"+t;
cout<<t;
return 0;
}

