题目链接:https://www.luogu.org/problem/P1303
题目描述
求两数的积。
输入格式
两行,两个数。
输出格式
积
输入输出样例
输入 #1
1 2
输出 #1
2
说明/提示
每个数字不超过10^2000,需用高精
c++代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string a;
string b;
cin>>a;
cin>>b;
if(a=="0"||b=="0") cout<<"0";
int A[10000]={0},B[10000]={0},C[10000]={0};//A用来存a中的每一个数 。。。。C用来存a和b的每一位数相乘的结果
int alen=a.length();
int blen=b.length();
int i,j;
for(i=0;i<=alen;i++)
A[alen-i]=a[i]-'0';//将a的每一位数转化为整数并逆序存入到A中
for(j=0;j<=blen;j++)
B[blen-j]=b[j]-'0';//b的每一位数转化为整数并逆序存入到B中
for(i=1;i<=blen;i++)//外层为乘数;与b的每一位相乘;
{
int x=0; //记录进位数
for(j=1;j<=alen;j++)
{
C[i+j-1]=C[i+j-1]+x+A[j]*B[i];//当前位置的的数等于当前位置的数加上上一个数的进位数再加A[j]*B[i]
x=C[i+j-1]/10;//当前位置数该向下一位进的位
C[i+j-1]=C[i+j-1]%10;//进位之后的数
}
C[i+alen]=x;//内层循环完了,将剩下的进位数进给下一位
}
int clen=alen+blen;
while(C[clen]==0)
clen--;//找出前缀0;
for(i=clen;i>0;i--)
cout<<C[i];//反向输出;
return 0;
}