• 再来一种求大数阶乘的方法


       过多的我就不说了,直接看看代码:

    java版的:

    /**
     * 
     */
    package Factorial;
    
    /**
     * @author 牟尼(昵称)
     * @blog:http://blog.csdn.net/u012027907
     *
     */
    public class Factorial {
    /*
     * 大数阶乘计算类
     */
    	/*
    	 * 分析:大数阶乘用数组来存储,如5的阶乘可存在数组cal[]中,表示为
    	 * 0  1  2  3
    	 *[3][0][2][7]
    	 *个位存阶乘的位数
    	 *要求5的阶乘,则要求得4!的结果,一直要求的1!的结果为1;
    	 *所以使用循环即可
    	 */
    	/*
    	 * 大数阶乘计算
    	 */
    	public String fac(int num){
    		String result; //最终结果的字符串
    		
    		int max; //阶乘的位数
    		double sum = 0;
    		
    		for(int i = 2; i <=num; i++){//计算阶乘的位数
    			sum += Math.log10(i);
    		}
    		max = (int)sum +1;
    		
    		int cal[] = new int[max+1];//开辟空间
    		
    		for(int j = 1; j <= max; j++)
    			cal[j] = 0;
    		cal[0] = max; //cal[0]存储阶乘的位数
    		
    		cal[1] = 1;
    		int g = 0;//进位
    	
    		for(int k = 2; k <= num; k++){//从2乘到num
    			g = 0;
    			for(int i =1; i <=max;i++){//计算每个k与数组相乘的结果
    				cal[i] = cal[i]*k + g;			
    				g = cal[i]/10;
    				cal[i] = cal[i]%10;
    			}
    		}
    		
    		result = "";
    		
    		for(int i = max; i > 0; i--)//将整型数组转为字符串
    			result += cal[i];
    		return result;
    	}
    }

    运行结果:



  • 相关阅读:
    (copy) Shell Script to Check Linux System Health
    HTML5 笔记1
    成年后更想要人懂
    端午不过节
    兜兜转转还是往前了一小步
    五月下旬这些天
    立陶宛话剧观后感
    杯子
    你学过的东西总会在某个时候用到
    初识理财记
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3429238.html
Copyright © 2020-2023  润新知