算m(1~1000)的阶乘时,当m>30时结果不正确

 public static void factor(int m)
    {
    	int[] A = {1};
    	for(int i = 1; i < m; i++)
    	{
    		A = helper(A, i+1);
    	}
    	for(int i = A.length - 1; i >= 0; i--)
    	{
    		System.out.print(A[i]);
    	}
    }
    public static int[] helper(int[] s, int a)//计算一个数组s乘以m的值,比如120 * 6的值,s为[0, 2, 1],m为6
    {
    	int i,temp = 0;
    	int[] arr = new int[(s[s.length - 1] * a + "").length() - 1 + s.length];//本次计算的结果长度
    	for(i = 0; i < s.length; i++)
    	{
    		arr[i] = (s[i] * a + temp) % 10;//加上前一次的十进位数
    		if(s[i] * a + temp >= 10)
    			temp = (s[i] * a + temp) / 10;
    		else
    			temp = 0;
    	}
    	if(temp != 0)//计算出最高位的数超出一位,要进行增加位数
    	{
    		for(int j = 0; j < arr.length - s.length; j++)//本次计算数比前次多的位数
    		{
    			arr[i+j]=temp % 10;//把多出的其中一位数存放在新数组中,最后返回至result[]中,i代表目前数组的最高数
    			if(temp >= 10)
    				temp /= 10;//放在本循环的j++循环止中进行
    			else
    				temp = 0;
    		}
    	}
    	return arr;
    }


算法困难户
浏览 1374回答 5
5回答

习惯受伤

因为数字太大了,溢出了。你用long型或者double类型。

qq_浮梦壹生_03287462

你这是计算阶乘的代码?我看着不像啊。

qq_浮梦壹生_03287462

你这是计算阶层的代码?我看着不像啊。

算法困难户

第16行计算位数的代码不对,没有考虑到当前最高位后面的数与阶乘数相乘所产生的进制问题

青春无极限7

用到大整数了,因为阶乘得到的结果位数太多,一般的无法得到正确结果
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java