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.
高精度乘法(大数乘法)
/*********************************
* 日期:2015-01-28
* 作者:SJF0115
* 题目: 43.Multiply Strings
* 网址:https://oj.leetcode.com/problems/multiply-strings/
* 结果:AC
* 来源:LeetCode
* 博客:
**********************************/
#include <iostream>
#include <cstring>
using namespace std;
class Solution {
public:
string multiply(string num1, string num2) {
int len1 = num1.length();
int len2 = num2.length();
// 容错处理
if(len1 <= 0 || len2 <= 0){
return "";
}//if
int sum = 0;
int len3 = len1 + len2;
char result[len3];
memset(result,'0',sizeof(result[0])*(len3+1));
for(int i = len1 - 1,m = 0;i >= 0;--i,++m){
for(int j = len2 - 1,n = 0;j >= 0;--j,++n){
sum = (num1[i] - '0') * (num2[j] - '0') + result[m+n] - '0';
result[m+n] = sum % 10 + '0';
// 进位
result[m+n+1] += sum / 10;
}//for
}//for
//确定乘积的位数
while(result[len3] == '0' && len3 > 0){
--len3;
}//while
//注意:加'\0'
result[len3+1] = '\0';
//翻转
int temp;
for(int i = 0,j = len3;i < j;++i,--j){
temp = result[i];
result[i] = result[j];
result[j] = temp;
}//for
return string(result);
}
};
int main(){
Solution solution;
string num1("0");
string num2("123");
string result = solution.multiply(num1,num2);
// 输出
cout<<result<<endl;
return 0;
}
/*for(int i = 0;i < result.size();++i){
for(int j = 0;j < result[i].size();++j){
cout<<result[i][j]<<" ";
}
cout<<endl;
}*/
原文地址:http://blog.csdn.net/sunnyyoona/article/details/43228569