0
点赞
收藏
分享

微信扫一扫

[模板题]高精度乘法


算法标签:高精度

题目描述:

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

输入格式
共两行,第一行包含整数A,第二行包含整数B。

输出格式
共一行,包含A * B的值。

数据范围
1≤A的长度≤100000,
1≤B≤10000
输入样例:
2
3
输出样例:
6

注意

乘数A 1≤A的长度≤100000,
乘数B 1≤B≤10000

思路

模仿手工乘法


a[n-1]a[n-2]...a[0] //乘数A

* b //乘数B
t[n-1]t[n-2]...t[0] //进位
c[n-1]c[n-2]...c[0] //答案 c[i]=(a[i]*b+t[i])%10,t[i]=c[i-1]/10

3 2 1 A
1 2 B

1 0 t[0]
2 0 0 t[1]
3 0 0 0 t[2]

2 c[0]
5 0 c[1]
8 0 0 c[2]

3 8 5 2 ans


题目代码

#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++)//a长乘数走完,b进位处理完为条件,a或b一真则全真
{
if(i<a.size())t+=a[i]*b;//如果a没处理完,t=乘数加可能存在的上一位的进位
c.push_back(t%10);//返回余数
t/=10;//进位
}

while(c.size()>1&&c.back()==0)c.pop_back();//清除可能存在的前导零

return c;
}
int main()
{
string a;
int b;

cin>>a>>b;

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

vector<int> c;
c=mul(A,b);

for(int i=c.size()-1;i>=0;i--)cout<<c[i];

return 0;
}


举报

相关推荐

0 条评论