题解 | #大数加法#
大数加法
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; }