[LeetCode43] Multiply Strings
来源:互联网 发布:网络兼职写手 编辑:程序博客网 时间:2024/06/10 04:59
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.
Analysis:
Straight forward idea. Just like the way we multiply numbers. Don't forget considering the carry and be careful. e.g.
123*456,
what we usually do is:
123
* 456
-----------
738
615
+492
-----------
56088
thus, 123*456 = 56088.
In the same way, the algorithm is:
from end to start position, use a new array to store temproary digit.
A*B
(1)For each element B[i]
Compute tmp = B[i]*A
Add tmp to the previous result, note the start position. res = res"+"tmp
(2)Return result.
To be specific,
(1) char2int, int(char-'0');
(2) int2char, char(int+'0')
(3) Don't forget the carry in each add or multiply operation.
(4) Don't forget the carry after last operation. e.g. 82+33 = 115.
(5) Be careful with the string order and the number order.
c++
string multiply(string num1, string num2) { if(num1.size() ==0 || num2.size() == 0) return "0"; string res(num1.size()+num2.size(),'0'); std::reverse(num1.begin(),num1.end()); std::reverse(num2.begin(),num2.end()); for(int i=0;i<num1.size();i++){ int digit1 = num1[i]-'0'; int carry = 0; for(int j=0;j<num2.size();j++){ int digit2 = num2[j]-'0'; int exist = res[i+j]-'0'; res[i+j] = (digit1*digit2+carry+exist)%10 + '0'; carry = (digit1*digit2+carry+exist)/10; } if(carry>0){ res[i+num2.size()] = carry +'0'; } } std::reverse(res.begin(),res.end()); int start = 0; while(res[start]=='0' && start<res.size()){ start++; } if(start == res.size()) {return "0";} return res.substr(start,res.size()-start);}
Java
public String multiply(String num1, String num2) { int len1 = num1.length();int len2 = num2.length(); if(len1 == 0 || len2==0) return "0"; int result[] = new int[len1+len2]; for(int i=0;i<len1;i++){ int carry = 0; int digit1 = num1.charAt(len1-1-i)-'0'; for(int j=0;j<len2;j++){ int digit2 = num2.charAt(len2-1-j)-'0'; result[i+j] += digit1*digit2+carry; carry = result[i+j]/10; result[i+j] %=10; } result[i+len2]+=carry; } int i = len1+len2-1; while(i>0 && result[i]==0) i--; StringBuilder temp = new StringBuilder(""); while(i>=0) temp.append((char)(result[i--]+'0')); return temp.toString(); }
- [LeetCode43] Multiply Strings
- Leetcode43 Multiply Strings
- LeetCode43. Multiply Strings
- leetcode43 Multiply Strings
- LeetCode43 Multiply Strings
- LeetCode43 Multiply Strings
- leetcode43. Multiply Strings
- LeetCode43——Multiply Strings
- LeetCode43——Multiply Strings(两个字符串表示的整数相乘)???
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- Multiply Strings
- 联网身份核查的模拟服务端
- oracle 查看当前用户
- 使Eclipse符合Java编程规范
- MIAN2客户端与spring的整合
- oracle 解锁 修改密码
- [LeetCode43] Multiply Strings
- Android计算器实现
- 万年历
- vim使用笔记+常用插件
- day52(5.2)
- mahout-0.6运行canopy聚类算法
- day54(5..4)
- linux 共享内存(shmget,shmat,shmdt,shmctl)解析
- C#调用Matlab生成的dll方法的详细说明