算法训练 P0505(Java实现)
终于来了一道一口气合成的题了,开心
**题目描述:**一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5!=12345=120,因此5!最右边的那个非0的数字是2。再如,7!=5040,因此7!最右边的那个非0的数字是4。再如,15!= 1307674368000,因此15!最右边的那个非0的数字是8。请编写一个程序,输入一个整数n(0<n<=100),然后输出n!最右边的那个非0的数字是多少。
**解题思路:**首先拿出演算本,打开计算器。想想我们阶乘最基础的计算方法,在演算本上写出前10的阶乘,
演算式 ----------------- 阶乘结果 --------------- 最右边非0数字
1!=1 -------------------- 1 ---------------------------------- 1
2!=1x2 -------------------2 ----------------------------------- 2
3!=1x2x3 ----------------- 6 ---------------------------------- 6
4!=1x2x3x4 ----------------- 24 -------------------------------- 4
5!=1x2x3x4x5 --------------120 --------------------------------- 2
6!=1x2x3x4x5x6 ------------- 720 --------------------------------- 2
7!=1x2x3x4x5x6x7 -------- 5040 -------------------------------- 4
8!=1x2x3x4x5x6x7x8 -------40320 -------------------------------- 2
9!=1x2x3x4x5x6x7x8x9 -------- 362880 -------------------------- 8
然后我左看右看终于发现了端倪,前一个数的阶乘结果的最右边0数字乘以当前数,再取出其最右边非0数就是我们的答案了。
不信你们验证一下。。。。结果我验证了一下,有bug,比如说25!
24!的最右边非0数为6,而6*25=150,那结果应该是5呀,但是25!的最右边非0数是4,为什么?,原因解释太长了我不想打字了。。。。直接上代码
代码实现:
import java.util.Scanner; //阶乘问题 public class Main_p0505 { public static void p0505(int n) { int temp; int sum=1; for(int i=2;i<=n;i++) { sum=sum*i; while(sum%10==0) { sum=sum/10; } sum=sum%1000; //取出后面的3位来相乘 } System.out.println(sum%10); } public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); p0505(n); } }
完毕。
- 隐马尔可夫训练参数,BaumWelch算法,java实现【参考52nlp的博客算法原理实现】
- 蓝桥杯算法训练单词接龙(DFS)java实现
- 蓝桥杯-算法训练-ALGO-87 字串统计 Java实现
- 蓝桥杯 算法训练01 Java实现
- 在java中实现图形学中的椭圆算法
- JAVA实现珠玑算法
- 图像边缘检测(Canny 算法)的Java实现
- 链栈实现算法 - Java 学习笔记(26)
- 贪心算法实例:安排会场(Java实现)
- 三种算法求最大公约数——Java实现
- 一个用Dijkstra算法实现的路由算法的java程序——1 GraphAdjList类
- [基本算法]Java——编写一个线段类,实现基本数学算法
- java实现归并算法
- 关于《射雕英雄传》的数学算法问题 JAVA实现
- java 垃圾回收机制和各种实现算法
- 中国农历算法java实现
- Java基于可扩充数组的向量实现(算法源码)
- 排列组合算法 的java实现
- 上楼梯算法的java实现(转)
- java实现的18位身份证格式验证算法