关于求一个正整数阶乘的实现
来源:互联网 发布:铺货软件 编辑:程序博客网 时间:2024/05/21 21:48
第一种实现小数字阶乘:
class Calculate { private long n; public Calculate(long _n) { this.n = _n; } public long calculateFactorial(long n) { if (n == 0) { return 1; } else if (n > 0) { return n * calculateFactorial(n - 1); } else { return 0; } } }
第二种实现方法:
class Calculate { private long n; public Calculate(long _n) { this.n = _n; } public string calculate(long n) { if (n < 0) { throw new ArgumentOutOfRangeException("n必须为非负数"); } else if (n == 0 || n == 1) { string result = "1"; return result; } else { //maxLength为数组的长度,也就是计算的结果最多可以容纳maxLength位的数值 const long maxLength = 10000; //array为存放数值的数组,一个下标存放一位数(0,1,2,3,4,5,6,7,8,9).如果为十的话,它就往在当前位置存储0,当前位置+1存储1 uint[] array = new uint[maxLength]; //因为阶乘的计算对象是非负整数,最小的值就是一 array[0] = 1; int i = 0; int j = 0; int valid = 1; //以六的阶乘计算: //一:1*2*3*4*5*6=720 //array[0]=1; //i=2,carry=0,j=0,valid=1,multipleResult=1*2+0=2,array[0]=2,carry=0; //i=3,carry=0,j=0,valid=1,multipleResult=2*3+0=6,array[0]=6,carry=0; //i=4,carry=0,j=0,valid=1,multipleResult=6*4+0=24,array[0]=4,carry=2,array[1]=2,valid=2,carry=0; //i=5,carry=0,j=0,valid=2,multipleResult=4*5+0=20,array[0]=0,carry=2 //i=5,carry=2,j=1,valid=2,multipleResult=2*5+2=12,array[1]=2,carry=1,array[2]=1,valid=3,carry=0; //i=6,carry=0,j=0,valid=3,multipleResult=0*6+0=0,array[0]=0,carry=0; //i=6,carry=0,j=1,valid=3,multipleResult=2*6+0=12,array[1]=2,carry=1; //i=6,carry=1,j=2,valid=3,multipleResult=1*6+1=7,array[2]=7,carry=0 for (i = 2; i <= n; i++) { long carry = 0; for (j = 0; j < valid; j++) { long multipleResult = array[j] * i + carry; array[j] = (uint)(multipleResult % 10); carry = multipleResult / 10; } while (carry != 0) { array[valid++] = (uint)(carry % 10); carry /= 10; } } // uint[] result = new uint[valid]; /* *public static void Copy( * Array sourceArray, * Array destinationArray, * int length * ) */ //Array.Copy(array, result, valid); string result = ""; StringBuilder sb=new StringBuilder(); //int count = 0; for (int k = valid-1; k >-1; k--) { sb.Append(array[k]); if ((uint)array[k] == 0) { count++; } } //System.Console.WriteLine("0一共出现过:" + count + "次"); result = sb.ToString(); return result; } } }
- 关于求一个正整数阶乘的实现
- 求一个正整数的阶乘 3=3*2*1
- 任意正整数求阶乘
- 求n的阶乘问题。输入一个正整数n,输出n!
- C语言编程:求n的阶乘问题。输入一个正整数n,输出n!
- 计算一个正整数的阶乘(JavaScript)
- 编程计算一个正整数的阶乘
- 使用python实现正整数的阶乘
- 关于求一个数的阶乘的C语言
- 求不大于n的正整数的阶乘的和
- 求一个大数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 第二人生的源码分析(5)类Log的实现
- 清除空格
- 大转折:IT史上的9个转折点
- 按钮属性用法举例
- 今週の生活
- 关于求一个正整数阶乘的实现
- 彩色图片匹配
- 如何编写批处理文件
- 关于做项目的一点儿体会
- 第一篇:我的开始
- 大家好,欢迎和大家做朋友!
- Tree控件的异步加载方案的选择建议(C#,ASP.NET 2.0)
- WINCE上的RAD开发(一)-----Lazarus的平台搭建
- 报表数据源的做成