3117 高精度乘法
题目描述 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位
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 char a[100001]; 6 char b[100001]; 7 int a1[10001]; 8 int b1[10001]; 9 int c[10001]; 10 int main() 11 { 12 scanf("%s",&a); 13 scanf("%s",&b); 14 int la=strlen(a); 15 int lb=strlen(b); 16 for(int i=0;i<=la-1;i++) 17 a1[la-i]=a[i]-48; 18 for(int i=0;i<=lb-1;i++) 19 b1[lb-i]=b[i]-48; 20 int i=0,j; 21 int x=0; 22 for( i=1;i<=la;i++) 23 { 24 x=0; 25 for( j=1;j<=lb;j++) 26 { 27 c[i+j-1]=a1[i]*b1[j]+x+c[i+j-1]; 28 x=c[i+j-1]/10; 29 c[i+j-1]=c[i+j-1]%10; 30 } 31 c[i+lb]=x; 32 } 33 34 int lc=la+lb; 35 while(c[lc]==0&&lc>1) 36 lc--; 37 for(int i=lc;i>=1;i--) 38 cout<<c[i]; 39 return 0; 40 }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。