不要被阶乘吓倒(1)
来源:互联网 发布:js中div 编辑:程序博客网 时间:2024/04/30 15:26
package com.demo;
/**
* 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3628800,N!的末尾有两个0。
* 此问题不需要计算出N!的值,因为可能溢出。
* 我们可以从哪些数相乘能得到10这个角度来考虑,问题就简单了
* @author ying
*
*/
public class Factorial1 {
/**
* 要计算结果,最简单的方法就是计算i(i=1,2,...,N)的因式分解中5的指数,然后求和
* @param n
* @return返回字符串格式“N!的末尾有ret个0。”
*/
public String method1(int n){
int ret = 0;
int j = 0;
for(int i = 1;i <= n;i++){
j = i;
while(j%5==0){
ret++;
j /= 5;
}
}
return "N!的末尾有"+ret+"个0。";
}
/**
* 公式:Z=[N/5]+[N/(5*5)]+[N/(5*5*5)]+...
* 公式中Z表示结果,[N/5]表示不大于N的数中5的倍数贡献一个5,[N/(5*5)]表示不大于N的数中(5*5)的倍数再贡献一个5......
* @param n
* @return返回字符串格式“N!的末尾有ret个0。”
*/
public String method2(int n){
int ret = 0;
while(n!=0){
ret += n/5;
n/=5;
}
return "N!的末尾有"+ret+"个0。";
}
}
/**
* 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3628800,N!的末尾有两个0。
* 此问题不需要计算出N!的值,因为可能溢出。
* 我们可以从哪些数相乘能得到10这个角度来考虑,问题就简单了
* @author ying
*
*/
public class Factorial1 {
/**
* 要计算结果,最简单的方法就是计算i(i=1,2,...,N)的因式分解中5的指数,然后求和
* @param n
* @return返回字符串格式“N!的末尾有ret个0。”
*/
public String method1(int n){
int ret = 0;
int j = 0;
for(int i = 1;i <= n;i++){
j = i;
while(j%5==0){
ret++;
j /= 5;
}
}
return "N!的末尾有"+ret+"个0。";
}
/**
* 公式:Z=[N/5]+[N/(5*5)]+[N/(5*5*5)]+...
* 公式中Z表示结果,[N/5]表示不大于N的数中5的倍数贡献一个5,[N/(5*5)]表示不大于N的数中(5*5)的倍数再贡献一个5......
* @param n
* @return返回字符串格式“N!的末尾有ret个0。”
*/
public String method2(int n){
int ret = 0;
while(n!=0){
ret += n/5;
n/=5;
}
return "N!的末尾有"+ret+"个0。";
}
}
0 0
- 不要被阶乘吓倒(1)
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 不要被阶乘吓倒
- 2.2不要被阶乘吓倒(读书笔记)
- 不要被阶乘吓倒(2)
- (1.5.2.2)不要被阶乘吓倒
- 2.2 不要被阶乘吓倒
- 程序员面试题(60):不要被阶乘吓倒
- 不要被阶乘吓倒(二进制表示中最低位1的位置 )
- 试题答案_不要被阶乘吓倒
- Column 2 has invalid name and/or length的解决
- 周赛 POJ 3546 The Dragon of Loowater
- 【PLSQL Developer】PLSQL Developer SQL Editor 乱码问题
- 私有类只能本类调用(实例)
- IOS成长中 C语言之指针一
- 不要被阶乘吓倒(1)
- 导弹
- 动态分配/撤销内存new和delete
- 心情随笔
- Gionee/金立GN777W root教程_方法
- 【CSS】css文件中URL路径以什么为准
- LG LU6200(Optimus LTE) root教程_方法
- hdu-1236-排名
- 英语七月结