【洛谷P1303 A*B Problem】
题目描述
求两数的积。
输入输出格式
输入格式:
两行,两个数。
输出格式:
积
输入输出样例
说明
每个数字不超过10^2000,需用高精
emm,显然本题需要用高精:高精,顾名思义,高精度运算,简洁来说就是很大的数字进行运算。
乘法中也运用了一些思想;比如说对于进位的处理(我用的是x)
先看看代码吧
#include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<iomanip> using namespace std; int main() { char a1[2001],b1[2001]; int a[2001]={},b[2001]={},c[200001]={},lena,lenb,lenc,i,j,x; scanf("%s",a1); scanf("%s",b1); lena=strlen(a1);lenb=strlen(b1); for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; for(i=0;i<=lenb-1;++i) b[lenb-i]=b1[i]-48; for(i=1;i<=lena;++i) { x=0; for(j=1;j<=lenb;j++) { c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+lenb]=x; } lenc=lena+lenb; while(c[lenc]==0&&lenc>1) lenc--; for(i=lenc;i>=1;i--) cout<<c[i]; cout<<endl; return 0; }
这就是比较传统的思想,对于进位的处理相对来说较容易理解(但代码有些麻烦)
通过熟练后也可以根据自己的码风来进行修改