【高精度】幸运之门

问题 L: 【高精度】幸运之门

时间限制: 1 Sec  内存限制: 64 MB
提交: 5  解决: 4
[提交] [状态] [讨论版] [命题人:外部导入]

题目描述

一天,毛毛和怪怪在玩一个破译密码的游戏,他们发现:一根密码棒上的数字乘上另一根密码棒上的数字,就是打开通向另一王国的“幸运之门”的密码锁密码。
如:123456×654321=80779853376,则80779853376就是一组有效的密码。
当毛毛和怪怪收到两根密码棒上的数字后,最先算出密码的就可以打开“幸运之门”通向另一王国。
请你帮毛毛编写一个程序,以最快速度算出密码。

输入

两行,每行一个正整数。

输出

一个正整数,为输入的两个正整数之积。

样例输入

123456
654321

样例输出

80779853376

提示

100%的数据:结果的值<1×1050

注意!!!一定不要忘记特判 s=="0"||t=="0"    否则会出现“16*0=00"的情况。

 1 #include <iostream>
 2 #include<string>
 3 using namespace std;
 4 string sa,sb;
 5 int a[10005],b[10005],c[100005];
 6 int main()
 7 {
 8     cin>>sa>>sb;
 9     if(sa=="0"||sb=="0")
10     {
11         cout<<"0"<<endl;
12         return 0;
13     }
14     int la=sa.size(),lb=sb.size();
15     for(int i=la-1;i>=0;i--)
16         a[la-i-1]=sa[i]-'0';
17     for(int i=lb-1;i>=0;i--)
18         b[lb-i-1]=sb[i]-'0';
19     for(int i=0;i<la;i++)
20     {
21         for(int j=0;j<lb;j++)
22             c[i+j]+=a[i]*b[j];
23     }
24     for(int i=0;i<la+lb;i++)
25         c[i+1]+=c[i]/10,c[i]%=10;
26     if(c[la+lb-1])  cout<<c[la+lb-1];
27     for(int i=la+lb-2;i>=0;i--)
28         cout<<c[i];
29     cout<<endl;
30     return 0;
31 }
View Code
如有错误,请指正,感谢!
原文地址:https://www.cnblogs.com/scott527407973/p/9319795.html