大整数乘法(高精度乘法)
题目链接: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; }