LeetCode Multiply Strings 大数相乘
2014-05-13 02:14
441 查看
题目要求:
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.
代码:
代码支持 大负数的相乘
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.
代码:
代码支持 大负数的相乘
class Solution { public: string multiply(string num1, string num2) { int flag1 = 1, flag2 = 1; if(num1.empty() || num2.empty()) return " "; if(num1[0] == '-') flag1 = -1; if(num2[0] == '-') flag2 = -1; string res; if(num1[0] == '0' || num2[0] == '0') return "0"; int len = num1.size(); if(flag1 == -1) num1 = num1.substr(1); if(flag2 == -1) num2 = num2.substr(1); for(int i = num1.size() - 1; i >= 0; --i) { MultiplyByNum(res, num2, num1[i], len - i - 1); } if(flag1 != flag2) res.insert(res.begin(), '-'); return res; } void MultiplyByNum(string& res, const string& multi, char num, int multiply) { string tmp; if(num == '0') return; MultiplyByNum(tmp, multi, num); for(size_t i = 0; i < multiply; ++i) tmp.push_back('0'); Add(res, tmp); } void MultiplyByNum(string& res, const string& multi, char num) { int carry = 0; for(int i = multi.size() - 1; i >= 0; --i) { int tmp = (multi[i] - '0') * (num - '0') + carry; res.push_back((tmp % 10) + '0'); carry = tmp / 10; } if(carry != 0) res.push_back(carry + '0'); reverse(res.begin(), res.end()); } void Add(string& num1, string& num2) { int carry = 0; string tmp; int len1 = num1.size(), len2 = num2.size(); int i = len1 - 1, j = len2 - 1; while(i >= 0 || j >= 0) { int sum = 0; if(i >= 0) { sum += num1[i] - '0'; --i; } if(j >= 0) { sum += num2[j] - '0'; --j; } sum += carry; tmp.push_back((sum % 10) + '0'); carry = sum / 10; } if(carry != 0) tmp.push_back(carry + '0'); reverse(tmp.begin(), tmp.end()); num1 = tmp; } };
相关文章推荐
- [LeetCode] Multiply Strings 字符串相乘
- Multiply Strings 两个字符串代表数字相乘@LeetCode
- [Leetcode] Multiply strings 字符串对应数字相乘
- Multiply Strings 大数相乘 java
- [leetcode] 43. Multiply Strings(大数相乘)
- 43. Multiply Strings 大数相乘 leetcode
- LeetCode Multiply Strings(大整数相乘)
- [LeetCode] 大数问题,相加和相乘,题 Multiply Strings
- LeetCode--Multiply Strings 字符串相乘
- [Leetcode 43 Multiply Strings]大数乘法,回到乘法本身的“最基础”去优化
- LeetCode | 43. Multiply Strings大数相乘
- [LeetCode] Multiply Strings 字符串相乘
- [LeetCode] Multiply Strings 字符串相乘
- 【LeetCode】43. Multiply Strings 大数相乘算法
- [Leetcode] Multiply Strings
- [LeetCode] 415 Add Strings && 67 Add Binary && 43 Multiply Strings
- LeetCode: Multiply Strings
- LeetCode 43: Multiply Strings
- LeetCode 43. Multiply Strings
- [LeetCode] Multiply Strings