洛谷 P1303 A*B Problem(高精度乘法) 题解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1303 A*B Problem(高精度乘法) 题解相关的知识,希望对你有一定的参考价值。

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。

题目链接 :https://www.luogu.org/problem/show?pid=1303

题目描述

求两数的积。

输入输出格式

输入格式:

两行,两个数。

输出格式:

输入输出样例

输入样例#1:
1 
2
输出样例#1:
2

说明

每个数字不超过10^2000,需用高精

 

AC代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 
 6 using namespace std;
 7 const int MAXN = 10000 + 5;
 8 
 9 struct bign
10 {
11     int len;
12     bool flag;
13     int num[MAXN];
14     
15     bign(){len = 0;flag = false;memset(num,0,sizeof(num));}
16     
17     void clear()
18     {
19         len = 0;
20         flag = false;
21         memset(num,0,sizeof(num));
22     }
23 };
24 bign ans;
25 
26 inline bool judge(bign a)
27 {
28     if(a.len == 1 && a.num[1] == 0)
29         return true;
30     return false;
31 }
32 
33 bign operator *(bign &a,bign &b)
34 {
35     int x = 0;
36     ans.clear();
37     int len = a.len + b.len + 1;
38     for(int i = 1;i <= a.len;++ i)
39     {
40         for(int j = 1;j <= b.len;++ j)
41         {
42             ans.num[i+j-1] += a.num[i]*b.num[j]+x;
43             x = ans.num[i+j-1]/10;
44             ans.num[i+j-1] %= 10;
45         }
46         ans.num[i+b.len] += x;x = 0;
47     }
48     while(!ans.num[len]) len --;
49     ans.len = len;
50     return ans;    
51 }
52 
53 inline bign get()
54 {
55     ans.clear();
56     string s;
57     cin>>s;
58     int len = s.length();
59     for(int i = 0;i < len;++ i)
60         ans.num[len-i] = s[i]-0;
61     ans.len = len;
62     return ans;
63 }
64 
65 inline void print(bign a)
66 {
67     int len = a.len;
68     for(int i = len;i >= 1;-- i)
69         printf("%d",a.num[i]);
70     puts("");
71 }
72 
73 int main()
74 {
75     bign a,b;
76     a = get();
77     b = get();
78     if(judge(a) || judge(b))
79         printf("0\n");
80     else
81         
82         print(a*b);
83     return 0;
84 } 

注意要特判a或b为0的情况

以上是关于洛谷 P1303 A*B Problem(高精度乘法) 题解的主要内容,如果未能解决你的问题,请参考以下文章

P1303 A*B Problem

P1303 A*B Problem(高精度乘法)

P1303 A*B Problem

P1303 A*B Problem

洛谷.1919.[模板]A乘B Problem升级版(FFT)

P1303 A*B Problem