1、题目分析
其实只要知道了具体的乘法运算法则即可写出这个实现,自己刚开始写的时候也是一头雾水,不过现在缕清了就好很多了~常规的两个乘法运算,比如123和456,其实是先用第一个数的3和456分别作乘法运算,然后使用2并错一位和456进行乘法运算,依此类推,并把结果相加进位即可,详细思路见源代码
2、源代码
#include<stdio.h>
#include<string>
#include<iostream>
#include<vector>
using namespace std;
const int L = 1100;
string mul(string, string);
int main()
{
string x, y;
while (cin >> x >> y)
cout << mul(x, y) << endl;
}
string mul(string a, string b)
{
string res = "";
if (a.empty() || b.empty()) return res;
int lenA = a.size(), lenB = b.size();
vector<int> inta(lenA, 0), intb(lenB, 0);//把字符转换成int类型
vector<int> vec(lenA+lenB, 0);//声明一个存放运算数值结果的容器
for (int i = lenA - 1; i >= 0; i--)
{
int temp = a[i] - '0';
inta[lenA-i-1]=temp;//这里其实为了计算方便,把数字反转过来了,对b也是这样操作
}
for (int i = lenB - 1; i >= 0; i--)
{
int temp = b[i] - '0';
intb[lenB - i - 1] = temp;
}
for (int i = 0; i < lenA; i++)
{
for (int j = 0; j < lenB; j++)
{
vec[i + j] = vec[i + j] + inta[i] * intb[j];//进行乘积,并对相同位置的计算结果进行叠加,此时还未进位
}
}
for (int i = 0; i < vec.size()-1; i++)
{
vec[i + 1] = vec[i] / 10 + vec[i + 1];//开始进位
vec[i] = vec[i] % 10;
}
for (int i = vec.size()-1; i >= 0; i--)
{
if (i == vec.size() - 1 && vec[i] != 0)
{
char temp = vec[i] + '0';
res = res + temp;
}
if (i != vec.size() - 1)
{
char temp = vec[i] + '0';
res = res + temp;
}
}
return res;
}