輸入不超過1000的正整數n,輸出n的階乘的精確結果
樣例輸入:30
樣例輸出:265252859812191058636308480000000
分析:
為了保存結果,需要分析1000!有多大。用計算器算一算不難知道,1000!約等于4*10^2567,因此可以用一個3000個元素的數組f保存。為方便起見,讓f【0】保存個位,f【1】保存十位等等,,,(方便向后進位);然后逆序除零輸出即可
- <span?style="font-size:24px;"><strong>#include<iostream>??
- #include<cstring>??
- using?namespace?std;??
- ??
- const?int?maxn?=?3000;??
- int?f[maxn];??
- ??
- int?main()??
- {??
- ????int?i,?j,?n;??//n!??
- ????cin>>n;??
- ????memset(f,?0,?sizeof(f));???//對f數組初始化??
- ????f[0]=1;????//從1開始乘積??
- ????for(i=2;i<=n;i++)??
- ????{??
- ???????int?c=0;??
- ???????for(j=0;j<maxn;j++)??
- ???????{??
- ???????????int?s?=?f[j]*i?+?c;??
- ???????????f[j]?=?s?%?10;??
- ???????????c?=?s?/?10;??
- ???????}??
- ????}??
- ????for(j=maxn-1;j>=0;j--)??
- ???????if(f[j])??
- ??????????break;??
- ????for(i=j;i>=0;i--)??
- ???????cout<<f[i];??
- ????cout<<endl;??
- ????system("pause");??
- ????return?0;??
- ?????????????
- }??
- </strong></span>??