[模板题]高精度乘法 原创

来源:模板题

算法标签:高精度

题目描述:

给定两个正整数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;
}
posted @   俺叫西西弗斯  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示