N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Problem Description
Input
Output
Sample Input
1
2
3
Sample Output
1
2
6
分析:可以看到N的最大值为10000,而10000!的阶乘远远超过了int类型的范围,所以我们考虑将结果存入数组,然后用数组中的数逐位与当前数字相乘,也就是将乘法步骤分解。
代码
#include<iostream>
using namespace std;
int main(){
int n,i,j,k,s,c,t; //k用来保存进位,c用来保存当前数组中的位数
int a[40002]; //定义一个足够大的数组
while(cin>>n){
a[1]=1;c=1;
for(i=1;i<=n;i++){
t=0;k=0;
for(j=1;j<=c&&t==0;j++){ //t来代表结果的位数是否发生变化,当t=1时代表位数c改变
s=a[j]*i+k;
a[j]=s%10; //得数除余保存在当前位
k=s/10;
if(k!=0){
if(j==c){
while(k){
c++;
a[c]=k%10;
k/=10;
}
t=1;
k=0;
}
}
}
}
for(c;c>0;c--){
cout<<a[c];
}
cout<<endl;
}
return 0;
}