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、将题目解决过程分成两个方面,
(1)两个字符串整数相加
(2)一个字符串乘以一个字符
2、注意add函数中的index++(由于这个语句未加调试了很久的)
3、如果结果为0,那么只输出字符串0
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string add(string num1,string num2)
{
int len1 = num1.size();
int len2 = num2.size();
if(len1==0)
return num2;
else if(len2==0)
return num1;
if(len1 < len2)
{
string temp = num1;
num1 = num2;
num2 = temp;
}
len1 = num1.size();
len2 = num2.size();
int inc = 0;
int i;
for(i=1;i<=len2;i++)
{
int c1 = num1.at(len1-i)-'0';
int c2 = num2.at(len2-i)-'0';
int sum = c1+c2+inc;
inc = sum/10;
num1.at(len1-i) = sum%10+'0';
}
int index = 1;
while(inc!=0)
{
if(len1-len2-index >=0)
{
int c1 = num1.at(len1-len2-index)-'0';
int sum = c1+inc;
num1.at(len1-len2-index) = sum%10+'0';
inc = sum/10;
index++;
}else{
num1.insert(0,1,(inc+'0'));
inc = 0;
}
}
return num1;
}
string multiplySingleChar(string num,char c)
{
int c_int = c-'0';
int len = num.size();
if(c == '0')
return string("0");
int inc = 0;
for(int i=1;i<=len;i++)
{
int sum = ( num.at(len-i)-'0' )*c_int + inc;
inc = sum/10;
num.at(len-i) = sum%10 + '0';
}
if(inc!=0)
{
num.insert(0,1,inc+'0');
}
return num;
}
string multiply(string num1, string num2) {
int len1 = num1.size();
int len2 = num2.size();
if(len1<=0 || len2 <=0)
exit(-1);
string sum;
for(int i=1;i<=len2;i++)
{
if(i==1)
{
sum = multiplySingleChar(num1,num2.at(len2-i));
}else{
string temp = multiplySingleChar(num1,num2.at(len2-i));
for(int j=i;j>1;j--)
{
if(temp!="0")
{
temp.append("0");
}
}
sum = add(sum,temp);
}
}
return sum;
}
int main(void)
{
string num1("123456789");//944977892635269
string num2("987654321");//987654312000000
string result = multiply(num1, num2);
cout << result.c_str() << endl;
system("pause");
return 0;
}