计算n的阶乘(大数)

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();
	}
	
}

猜你喜欢

转载自blog.csdn.net/weixin_45735242/article/details/104918543