首页 > 编程语言 > 详细

高精度算法—乘法篇

时间:2020-03-21 04:41:47      阅读:44      评论:0      收藏:0      [点我收藏+]

同理参照高精度算法-减法篇,一个模板改过来的

解决跟高精度减法不同的问题:

①位数问题

减法篇位数会减小(最大会到1位)

加法篇位数会增大(最大会多1位)

乘法篇位数会增大(最大不超过两数位数之和)

即改变maxl的值

int maxl = s1.length() + s2.length();

 

②前导零问题

1 while (ans[maxl] == 0 && maxl > 1)
2         maxl--;

 

终极代码:

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 int arr1[200000], arr2[200000], ans[200000];
 6 string chengfa(string s1, string s2)
 7 {
 8     int maxl = s1.length() + s2.length();
 9     string ss;
10     if (s1.length() < s2.length() || (s1.length() == s2.length() && s1 < s2))
11     {
12         return chengfa(s2, s1);
13     }
14     for (int i = 1; i <= s1.length(); i++)
15         arr1[i] = s1[s1.size() - i] - 0;
16     for (int i = 1; i <= s2.length(); i++)
17         arr2[i] = s2[s2.size() - i] - 0;
18     for (int i = 1; i <= s1.length(); i++)
19     {
20         for (int j = 1; j <= s2.length(); j++)
21         {
22             ans[i + j - 1] += arr1[i]*arr2[j];
23         }
24     }
25     for (int i = 1; i < s1.length() + s2.length(); i++)
26     {
27         if (ans[i] > 9)
28         {
29             ans[i + 1] += ans[i] / 10;
30             ans[i] %= 10;
31         }
32     }
33     while (ans[maxl] == 0 && maxl > 1)
34         maxl--;
35     for (int i = maxl; i > 0; i--)
36         ss += ans[i] + 0;
37     return ss;
38 }
39 int main()
40 {
41     string s1, s2;
42     cin >> s1 >> s2;
43     cout << chengfa(s1, s2);
44 }

 

高精度算法—乘法篇

原文:https://www.cnblogs.com/luoyoooo/p/12535318.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!