计算n!
来源:互联网 发布:网络数据库的信息检索 编辑:程序博客网 时间:2024/04/26 03:35
计算n的阶乘时需要考虑结果溢出的情况,如果n的值较大,就不能简单的使用int类型或者long、double这些类型来保存结果值。这个时候我们可以使用数组来保存结果,每个元素对应结果的每一个位数 int result[n];
这时候,我们需要判断result数组的长度,也就是n的值,那么如何求解出这个n的值呢?我们看看下面:
int resultint = 1*2*3*...*n;判断一个数的位数通常是判断它是10的多少倍然后在判断是否加1也就是可以通过lgresult来判断result的位数
知道了数组的长度之后,就可以继续下一步了,将数组初始化,每一个数对应第几位的数值,初始化第一个元素也就是a[1]=1,然后遍历1-n对数组的每一个元素进行相乘并且加上对应的进位
实现代码:
public class test{ public static void main(String[] args){ test t = new test(); System.out.println("please input a number: "); int n; Scanner in = new Scanner(System.in); n = in.nextInt(); t.fun(n); } public void fun(int n){ //先计算阶乘的结果的位数,从而定义保存结果的数组的长度 double sum1 = 0; for(int i=1; i<n; i++){ sum1 += Math.log10(i); } int strlen = (int)Math.ceil(sum1); int result[] = new int[strlen+1]; //初始化结果数组 for(int i=2; i<strlen; i++) result[i] = 0; result[1] = 1; //进行阶乘计算 int value,carry; for(int i=2; i<=n; i++) { carry = 0; for(int j=1; j<=strlen; j++) { value = result[j] * i + carry; carry = value / 10; result[j] = value % 10; } } //将结果以字符串形式输出 String resultstr = ""; for(int i=strleng; i>=1; i--) resultstr += result[i]; System.out.println("the result of the number " + n + "is:" + resultstr); }}
0 0
- n!计算
- 计算 N!
- 计算n!
- 计算n!
- 计算n!
- 计算N!
- 计算C(2n, n)
- 计算N的阶乘
- 计算floor(sqrt(n))
- 计算N的阶乘
- 计算N的阶层
- 计算n的阶层
- 递归算法计算n!
- 计算n的阶乘
- 计算n阶行列式
- 计算1~n之和
- 计算n阶行列式
- 1104 计算n!
- 真正解决ASP.NET每一个页面首次访问超级慢的问题
- minerd和wnTKYg进程(病毒)--被攻击CPU占用率达到100%
- Android Handler加载图片的几种方式(完)
- Java中的参数传递
- shell脚本之函数
- 计算n!
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建
- 图解DNS的工作原理
- MQTT---HiveMQ源码详解(十九)Cluster-Request/Response
- 5-18 Hashing
- 创建Activiti项目
- ACM程序设计 -L (字符串倒输出)
- MQTT---HiveMQ源码详解(二十)Cluster-Replicate/VectorClock
- 三本书--前端好书