算法标签:高精度
题目描述:
给定两个正整数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;
}