LeetCode Multiply Strings 高精度乘法C++实现
来源:互联网 发布:男内裤 知乎 编辑:程序博客网 时间:2024/06/07 03:36
Multiply Strings
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.
这道题就是模拟乘法思维了,还需要模拟加法思维,每一位乘以一个数都要和前面的结果加起来。
注意:
1 要把这两个操作过程分清楚,不能混饶了,否则会结果不正确的。
2 乘法有进位,和前面的结果加起来也有加法进位,一定要分清楚。
3 每一次一个新数位与被乘数相乘之前,都一定要把两个进位加在结果上。
4 同时需要把两个进位值都清零。
我基本上都是栽在这几个点上了,不然不用花那么长时间,思考问题的思路还是不够清晰,仍然需要继续提高啊!
- string multiply(string num1, string num2) {
- int n1 = num1.length();
- int n2 = num2.length();
- if(n1 == 0 || n2 == 0) return "0";
- int upto = 0;
- int sumupto = 0;
- string sum;
- int s = 0;
- sum.resize(n1+n2, '0');
- int i, j;
- for (i = n1-1; i >= 0; i--)
- {
- int a = num1[i] - '0';
- //注意:每次新开始upto进位值都要清零
- for (j = n2-1, upto = 0; j >= 0; j--)
- {
- int b = num2[j] - '0';
- s = b * a + upto;
- upto = s / 10;
- //注意:要系统分析,先计算出乘法,处理好,之后再处理加法。
- int rmd = s%10;
- int sij1 = sum[i+j+1] - '0';
- int rs = rmd + sij1 + sumupto;
- sumupto = rs/10;
- rs %= 10;
- sum[i+j+1] = rs + '0';
- }
- //注意:把最后一次的进位值加上!
- //注意:要把加法进位和乘法进位都加上
- sum[i+j+1] += (upto+sumupto);
- //注意:加法进位一定需要清零
- sumupto = 0;
- }
- while (sum.length() > 1 && sum[0] == '0') sum.erase(sum.begin());
- return sum;
- }
- /*令人难以想象的特殊情况
- Input: "9133", "0"
- Output: "0000"
- Expected: "0"
- */
思考算法问题都是令人头疼的事情,需要毅力去坚持!
思路更加清晰,程序更加简洁了:
- //2014-1-27
- string multiply(string num1, string num2)
- {
- string rs(num1.length()+num2.length(), '0');
- for (int i = num1.length()-1, d = rs.length()-1; i >= 0; i--, d--)
- {
- int carry = 0, k = d;
- for (int j = num2.length()-1; j >= 0; j--, k--)
- {
- int a = num1[i] - '0';
- int b = num2[j] - '0';
- a = a*b+carry + (rs[k]-'0');
- carry = a/10;
- rs[k] = a%10 + '0';
- }
- while (carry)
- {
- int sum = carry + (rs[k]-'0');
- carry = sum / 10;
- rs[k--] = sum % 10 + '0';
- }
- }
- while (rs.size() > 1 && rs[0] == '0') rs.erase(rs.begin());
- return rs;
- }
0 0
- LeetCode Multiply Strings 高精度乘法C++实现
- LeetCode Multiply Strings 高精度乘法C++实现
- LeetCode 43 Multiply Strings(高精度乘法)
- LeetCode-Multiply Strings实现大数的乘法
- [leetcode] 43 Multiply Strings(模拟大数乘法)
- LeetCode 43. Multiply Strings(乘法)
- leetcode---Multiply Strings---大整数乘法
- LeetCode | 43. Multiply Strings(大整数乘法)
- 大整数乘法--leetcode Multiply Strings
- [C++]LeetCode: 69 Multiply Strings
- 【C++】【LeetCode】43. Multiply Strings
- Leetcode c语言-Multiply Strings
- 【大数乘法】Multiply Strings
- 大数乘法(Multiply Strings)
- Multiply Strings 大数乘法
- Multiply Strings:乘法运算
- leetcode:Multiply Strings(字符串的乘法)【面试算法题】
- LeetCode-------43. Multiply Strings(字符串的乘法运算)
- Android 控件:ImageView、ProgressBar、AlertDialog、ProgressDialog
- [LeetCode] Word Break, Solution
- 使用node.js和socket.io实现多人聊天室
- WordPress4.1英文版转中文版
- Binary Tree Maximum Path Sum
- LeetCode Multiply Strings 高精度乘法C++实现
- Mac下安装Wordpress4.1英文版
- Longest Common Prefix
- 刨根问底U3D---Mono的配置
- 【学习排序】 Learning to Rank中Pointwise关于PRank算法源码实现
- 解决WordPress打开缓慢
- 周五了记录下什么
- poj 1141(Brackets Sequence 动态规划)
- 解决本地WordPress安装主题需要FTP问题即无法创建目录问题