【每日算法】基础算法——高精度系列[高精度乘法](九)

题目内容

给定两个正整数A和B,请你计算A * B的值。

输入格式

共两行,第一行包含整数A,第二行包含整数B。

输出格式

共一行,包含A * B的值。

数据范围

1≤A的长度≤100000 ,
0≤B≤10000

输入样例

2
3

输出样例

6

题解

假设A和b相乘,A为高精度数。A的每一位和b相乘,求出每次相乘的结果数以及进位数,然后依次放入结果数列中即可,举个例子:

C1到C4代表每个位上的结果,t1到t3为进位数。
C1 = (3 x 11) % 10 = 3
t1 = (3 x 11) / 10 = 3
C2 = (2 x 11 + t1) % 10 = 5
t2 = (2 x 11) / 10 = 2
C3 = (1 x 11 + t2) % 10 = 3
t3 = (1 x 11) / 10 = 1
C4 = (0 x 11 + t3) = 1
故,最终答案为C4C3C2C1=1353。

代码

#include <iostream>
#include <vector>

using namespace std;

vector<int> mul(vector<int> &A, int b){
vector<int> C;

int t = 0;//进位
for (int i = 0; i < A.size() || t; i++)
{
if (i < A.size()) t+=A[i]*b;
C.push_back(t % 10);//把个位取出
t /= 10;
}
return C;
}

int main(){
string a;

int b;

cin >> a >> b; //a="123456"

vector<int> A;
for(int i = a.size()-1;i>=0;i--) A.push_back(a[i] - '0');

auto C = mul(A,b); //auto自动类型推导

for (int i=C.size()-1;i>=0;i--)printf("%d",C[i]);
return 0;
}
Author: Frederic Niu
Link: https://www.fredericniu.cn/2020/11/20/【每日算法】基础算法——高精度系列-高精度乘法-(九)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号