【洛谷P1303】高精度乘法
A*B Problem
题目背景
高精度乘法模板题。
题目描述
给出两个非负整数,求它们的乘积。
输入格式
输入共两行,每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
样例 #1
样例输入 #1
1
2
样例输出 #1
2
提示
每个非负整数不超过 10^2000。
入坑OI这么久 发现还没有写过高精乘高精的题目
于是今天就来写一下啦
思路就是用小学时就学过的列竖式思想
注意一下输入输出和前导零就行
不打注释了喵
#include<bits/stdc++.h>
#define ll long long
using namespace std;
string a,b;
int k[2005],n[2005];
int num[200005];
int main(){
cin>>a>>b;
int l=a.length(),m=b.length();
for(int i=1;i<=l;i++){
k[i]=a[l-i]-'0';
}
for(int i=1;i<=m;i++){
n[i]=b[m-i]-'0';
}
int x=l+m-1;
for(int i=1;i<=l;i++){
for(int j=1;j<=m;j++){
num[i+j-1]+=k[i]*n[j];
num[i+j]+=num[i+j-1]/10;
num[i+j-1]%=10;
}
}//采用列竖式的思想
int flag=0;
for(int i=1;i<=l+m;i++){
if(num[i]){
flag=1;
break;
}
}
if(flag==0){
cout<<0;
system("pause");
return 0;
}
if(num[x+1]>=1) x++;
while(num[x]==0&&x>=2) --x;
for(int i=x;i>=1;i--){
cout<<num[i];
}
system("pause");
return 0;
}

浙公网安备 33010602011771号