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

来源:互联网 发布:淘宝客服班培训多少钱 编辑:程序博客网 时间:2024/05/16 19:24

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

java版的:

[java] view plaincopy
  1. /** 
  2.  *  
  3.  */  
  4. package Factorial;  
  5.   
  6. /** 
  7.  * @author 牟尼(昵称) 
  8.  * @blog:http://blog.csdn.net/u012027907 
  9.  * 
  10.  */  
  11. public class Factorial {  
  12. /* 
  13.  * 大数阶乘计算类 
  14.  */  
  15.     /* 
  16.      * 分析:大数阶乘用数组来存储,如5的阶乘可存在数组cal[]中,表示为 
  17.      * 0  1  2  3 
  18.      *[3][0][2][7] 
  19.      *个位存阶乘的位数 
  20.      *要求5的阶乘,则要求得4!的结果,一直要求的1!的结果为1; 
  21.      *所以使用循环即可 
  22.      */  
  23.     /* 
  24.      * 大数阶乘计算 
  25.      */  
  26.     public String fac(int num){  
  27.         String result; //最终结果的字符串  
  28.           
  29.         int max; //阶乘的位数  
  30.         double sum = 0;  
  31.           
  32.         for(int i = 2; i <=num; i++){//计算阶乘的位数  
  33.             sum += Math.log10(i);  
  34.         }  
  35.         max = (int)sum +1;  
  36.           
  37.         int cal[] = new int[max+1];//开辟空间  
  38.           
  39.         for(int j = 1; j <= max; j++)  
  40.             cal[j] = 0;  
  41.         cal[0] = max; //cal[0]存储阶乘的位数  
  42.           
  43.         cal[1] = 1;  
  44.         int g = 0;//进位  
  45.       
  46.         for(int k = 2; k <= num; k++){//从2乘到num  
  47.             g = 0;  
  48.             for(int i =1; i <=max;i++){//计算每个k与数组相乘的结果  
  49.                 cal[i] = cal[i]*k + g;            
  50.                 g = cal[i]/10;  
  51.                 cal[i] = cal[i]%10;  
  52.             }  
  53.         }  
  54.           
  55.         result = "";  
  56.           
  57.         for(int i = max; i > 0; i--)//将整型数组转为字符串  
  58.             result += cal[i];  
  59.         return result;  
  60.     }  
  61. }  
运行结果:


原创粉丝点击