[模板题]高精度乘法 原创
来源:模板题
算法标签:高精度
题目描述:
给定两个正整数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;
}
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人