大数加法模拟『模板』-编程技巧-反转再反转
大数加法
http://www.nowcoder.com/questionTerminal/11ae12e8c6fe48f883cad618c2e81475
- 大数加法模拟『模板』-编程技巧-反转再反转
AC代码
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ string solve(string s, string t) { // write code here reverse(s.begin(), s.end()); //核心,反转1 reverse(t.begin(), t.end()); int lenA=s.size(); int lenB=t.size(); int carry=0; int curPos=0; vector<int> temp( max(lenA,lenB)+1 ); //注意点1:防止进位,多1个 int a=0,b=0; while( a<lenA && b<lenB ) { int one=s[a]-'0'; int two=t[b]-'0'; temp[curPos]=(one+two+carry)%10; //注意点2:temp和carry顺序 carry=(one+two+carry)/10; ++a; ++b; ++curPos; } while( a<lenA ) { int one=s[a]-'0'; temp[curPos]=(one+carry)%10; carry=(one+carry)/10; ++a; ++curPos; } while( b<lenB ) { int two=t[b]-'0'; temp[curPos]=(two+carry)%10; carry=(two+carry)/10; ++b; ++curPos; } if( 0!=carry ) { temp[curPos++]=carry; } string ret; for(int i=curPos-1; i>=0; --i)//核心,反转2 { char c=temp[i]+'0'; ret+=c; } return ret; } };