大数阶乘

描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50

样例输出

30414093201713378043612608166064768844377641568960512000000000000

解题思路:

java中的int为4个字节,没办法存下那么大的数字,所以只能转用其他办法解决,这里使用的是数组

1,创建一个足够大的数组,int a[20000][2]其中的第一位用来存数值,第二位用来标记当前这一位是否可用,这个值为1时表示当前这一位可用,0不可用。

2,设置数组的a[0][1],a[0][0]都为1,表示当前的第一位可用。

3,开始计算阶层,思路是这样的,用数组中所有能用的单元,都乘上这个数,然后,如果当前的数组中的这个值大于了9,表示要进位,将当前这个值除以10的数加到下一位,然后再自己对10求余,这样算到能用的最高位,如果最高位还是要进位,就把最高位+1的位置设置为可用,然后存在来,就这样,直到所有数字都算完,然后从最高位开始输出当前数组中的值,即是我们要的结果

代码:

import java.util.Scanner;


public class 大数阶乘 {
	public static int a[][]=new int[20000][2];
	public static void main(String []arg)
	{
		Scanner scanner =new Scanner(System.in);
		int i=scanner.nextInt();
		get_result(i);
	}
	public static void get_result(int number)
	{
		int i=0,j=0;
		a[0][0]=1;
		a[0][1]=1;
		for(i=number;i>0;i--)
		{
			for(j=0;a[j][0]==1;j++)
			{
				a[j][1]=a[j][1]*i;
			}
			for(j=0;a[j][0]==1;j++)
			{
				if(a[j][1]>9)
				{
					a[j+1][0]=1;
					a[j+1][1]=a[j+1][1]+a[j][1]/10;
					a[j][1]=a[j][1]%10;
				}
			}
		}
		for(j=0;a[j][0]==1;j++);
		j--;
		for(;j>=0;j--)
			System.out.print(a[j][1]);
		System.out.println();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值