问题 L: 【高精度】幸运之门
时间限制: 1 Sec 内存限制: 64 MB提交: 5 解决: 4
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
一天,毛毛和怪怪在玩一个破译密码的游戏,他们发现:一根密码棒上的数字乘上另一根密码棒上的数字,就是打开通向另一王国的“幸运之门”的密码锁密码。
如:123456×654321=80779853376,则80779853376就是一组有效的密码。
当毛毛和怪怪收到两根密码棒上的数字后,最先算出密码的就可以打开“幸运之门”通向另一王国。
请你帮毛毛编写一个程序,以最快速度算出密码。
如: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 }