注意样例+大数乘法+逆向思维
大数乘法
http://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571
注意样例
- 1、当某个为0的时候,需要特判!!
- 2、注意,要先找到最高位!
- 3、逆向思维
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 * @return string字符串 */ string solve(string s, string t) { // write code here int one=s.size(); int two=t.size(); if( 1==one && '0'==s[0] ) { return "0"; } if( 1==two && '0'==t[0] ) { return "0"; } reverse( s.begin(), s.end() ); reverse( t.begin(), t.end() ); //表示进位 int carry=0; //vector默认初始化为0 vector<int> res(one+two); fill(res.begin(), res.begin()+one+two, 0); for(int i=0; i<one; ++i) { for(int j=0; j<two ; ++j ) { int first=s[i]-'0'; int second=t[j]-'0'; res[i+j]+=first*second; carry=res[i+j]/10; res[i+j]%=10; int loop=i+j+1; //可以进位的时候 while( carry ) { res[loop]+=carry; carry=res[loop]/10; res[loop]%=10; //MaxPos=max( MaxPos, loop ); ++loop; } } } string result; int pos=one+two-1; while( 1 ) { if(res[pos]>0 ) { break; } else { --pos; } } //MaxPos+=1; do { result+=('0'+res[pos]); --pos; }while(pos>=0); return result; } };