3117 高精度练习之乘法
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题目描述 Description
给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A*B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
36
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
#include<iostream> #include<cstring> using namespace std; int a[501],b[501],f[501],lena,lenb,lenc=1,x; char n[501],m[501]; int main() { cin>>n; cin>>m; lena=strlen(n); lenb=strlen(m); for(int i=0; i<lena; i++) a[lena-i]=n[i]-‘0‘; for(int i=0; i<lenb; i++) b[lenb-i]=m[i]-‘0‘; for(int i=1; i<=lena; i++) { x=0; for(int j=1; j<=lenb; j++) { f[i+j-1]=a[i]*b[j]+x+f[i+j-1]; x=f[i+j-1]/10; f[i+j-1]%=10; } f[i+lenb]=x; } lenc=lena+lenb; while(f[lenc]==0&&lenc>1) lenc--; for(int i=lenc; i>=1; i--) cout<<f[i]; return 0; }
时间: 2024-11-06 03:36:09