题目描述 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 <string.h> 3 #include <math.h> 4 5 using namespace std; 6 7 int main() 8 { 9 char a[600],b[600];//计算a*b 10 cin>>a>>b; 11 //scanf("%s %s",la,lb); 12 int la=strlen(a),lb=strlen(b),l=0; 13 int an[600],bn[600]; 14 if(la>lb) 15 { 16 for(int i=la-1;i>=la-lb;i--) 17 bn[i]=b[i-(la-lb)]-‘0‘; 18 for(int i=0;i<=la-lb-1;i++) 19 bn[i]=0; 20 for(int i=0;i<=la-1;i++) 21 an[i]=a[i]-‘0‘; 22 l=la-1; 23 } 24 else if(la<lb) 25 { 26 for(int i=lb-1;i>=lb-la;i--) 27 an[i]=a[i-(lb-la)]-‘0‘; 28 for(int i=0;i<=lb-la-1;i++) 29 an[i]=0; 30 for(int i=0;i<=lb-1;i++) 31 bn[i]=b[i]-‘0‘; 32 l=lb-1; 33 } 34 else 35 { 36 for(int i=0;i<=la-1;i++) 37 an[i]=a[i]-‘0‘; 38 for(int i=0;i<=lb-1;i++) 39 bn[i]=b[i]-‘0‘; 40 l=la-1; 41 } 42 int a0[600],b0[600]; 43 for(int i=0;i<=l;i++) 44 { 45 a0[i]=an[l-i]; 46 b0[i]=bn[l-i]; 47 } 48 int mul[600]={0}; 49 for(int j=0;j<=l;j++) 50 for(int i=0;i<=l;i++) 51 { 52 mul[i+j]+=a0[i]*b0[j]; 53 if(i+j!=2*l) 54 { 55 while(mul[i+j]>=10) 56 { 57 mul[i+j]-=10; 58 mul[i+j+1]++; 59 } 60 } 61 62 } 63 int flag=0; 64 for(int i=2*l;i>=0;i--) 65 { 66 if(mul[i]!=0) 67 flag=1; 68 if(flag) 69 cout<<mul[i]; 70 } 71 cout<<endl; 72 return 0; 73 }
居然wa了好几次……
最后没耐心了 用的加法模板改的
比较繁
原文地址:https://www.cnblogs.com/yalphait/p/8486316.html
时间: 2024-11-06 07:44:03