1.问题描述
两个大数相乘。输入是两个字符串,如“99”,“99”。实现两个数的相乘。返回结果也是一个字符串,结果是”9801”。因为是C++,所以使用string。
输入描述:
输入两个字符串
输出描述
输出为一行
2.代码(分析在代码中)
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
string mul(string num1,string num2)
{
int len1 = num1.size();
int len2 = num2.size();
//如num1是 "99",num2是 "99",结果应该是:"9801"。
//虽然结果是4位数,但是我们使用数组来保存,其实3位数组就可以了
//也就是说,我们只需要num1.size()+num2.size()-1,长的数组就可以了
int len = len1+len2-1;
//申请len长度的数组,并且初始化每一位数是0
vector<int> result(len,0);
//先乘起来,后面统一进位
// 9 9
//* 9 9
// 81 81 81
// 81
//把每一位结果加起来就可以了
for(int i=0;i<len1;++i)
{
for(int j=0;j<len2;++j)
result[i+j] += (num1[i]-'0')*(num2[j]-'0');
}
//处理进位
for(int i=len-1;i>=1;--i)
{
int num = result[i];
if(num>9)
{
result[i] = num%10;
result[i-1] +=num/10;
}
}
//使用stringstream流,方便把数组输出到字符串中
ostringstream osstr;
for(int i=0;i<len;++i)
osstr<<result[i];
return osstr.str();
}
int main()
{
string num1,num2;
cin>>num1>>num2;
cout<<mul(num1,num2)<<endl;
return 0;
}
3.测试
输入:
99
99
输出:
9801
输入:
1111
1111
输出:
1234321
注意:
这里输入的字符串都是合法的,并且没有负号。