import java.util.Scanner;
public class Main {
public static void main(String[] args){
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
// 最大存储位数1000位
int[] nums = new int[1000]; // (下标0,1,2....分别代表个位,十位,百位)
String num = "";
int k = 0;
int n = 0;
System.out.println("n阶乘");
System.out.print("输入n:");
n = in.nextInt();
nums[0] = 1;
System.out.printf("%d的阶乘为:",n);
if(n==0)
{
System.out.println(1);
}
else if(n>0)
{
for(int i=1;i<=n;i++) // 求后面n次
{
for(int j=0;j<nums.length;j++)
{
int sum = 0;
if(j==0)
{
nums[j] *= i;
}
else if(nums[j-1] < 10) // 若上次进位查看上次是否小于10
{
nums[j] *= i;
}
else // 若上次进位查看上次是否大于等于10,从上次位置开始
{
j--;
}
if(nums[j] >= 10) // 大于等于10向前进位
{
sum = nums[j]/10;
nums[j] %= 10;
}
if(sum != 0) // 向前进位
{
// 要先求上位在加上进位
j++;
nums[j] *= i;
nums[j] += sum;
}
}
}
for(int i=nums.length-1;i>=0;i--) // 找到最后一位非零,即最高位
{
if(nums[i] != 0)
{
k = i;
break;
}
}
for(int i=k;i>=0;i--)
{
num += nums[i];
}
System.out.println(num);
}
in.close();
}
}