problem:
Given two numbers represented as strings, return multiplication of the numbers as a string.
Note:
The numbers can be arbitrarily large and are non-negative.Converting the input string to integer is NOT allowed.You should NOT use internal library such as BigInteger. 题目的意思是计算两个字符串表示的非负数的乘积。按照平时笔算的思路,先从低位开始,依次计算并记录进位即可。注意要先把两个string使用reverse()函数反向一下,使得低位在前,高位在后,方便循环操作。
值得注意的是不能直接计算然后一次性转成数组,所以在每一步的时候,都要记录一次数据。设置一个标记pos记录要放入的位置序号,若当前位置有值,则将result中的值取出来,求和后再放入;若当前位置无值,就直接append进去。
class Solution { public: string multiply(string num1, string num2) { string result = ""; if(num1.length()==0 || num2.length()==0) return result; if(num1 == "0" || num2 == "0") return "0"; //从低位到高位依次计算 reverse(num1.begin(), num1.end()); reverse(num2.begin(), num2.end()); int carry = 0; //保存进位信息 int sum = 0; int temp = 0; int i=0; for(; i<num2.size(); i++) { carry = 0; int pos = i; for(int j=0; j<num1.size(); j++) { temp = (num2[i] - '0') * (num1[j] - '0') + carry; if(pos < result.length()) { temp += result[pos] - '0'; result[pos] = temp % 10 + '0'; } else result.append(1, temp+'0'); carry = temp /10; pos++; } if(carry != 0) result.append(1, carry + '0'); } reverse(result.begin(), result.end()); return result; } };
