18.2.28 codevs3115 高精度练习之乘法

Posted TobicYAL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18.2.28 codevs3115 高精度练习之乘法相关的知识,希望对你有一定的参考价值。

题目描述 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 }
View Code

居然wa了好几次……

最后没耐心了 用的加法模板改的

比较繁

以上是关于18.2.28 codevs3115 高精度练习之乘法的主要内容,如果未能解决你的问题,请参考以下文章

CODEVS3115高精度练习之减法

3115 高精度练习之减法

3115 高精度练习之减法

CodeVS 3123 高精度练习之超大整数乘法

codevs 3119 高精度练习之大整数开根 (各种高精+压位)

3116 高精度练习之加法