解题思路:
只需要知道2和5可以组成一个零,并且2的数量总会比5多,所有只需要求解阶乘中质因数5的个数就可以求出阶乘中后导零的个数
所以问题变成了:求阶乘中某质因子个数:
只需将n循环整除所要求的质因子并将得数相加就行
private static long f(long n){ long ans = 0; while (n >= 5){ ans += n/5; n /= 5; } return ans; }
接着就是在1 ≤ K ≤ 10的18次方的范围内进行二分查找
参考代码:
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); long k = sc.nextLong(); long start = 5; long end = 4000000000000000020L; while (start k){ end = mid - 1; }else if(temp < k){ start = mid + 1; }else { while (mid % 5 != 0){ mid --; } System.out.println(mid); return; } } System.out.println(-1); } private static long f(long n){ long ans = 0; while (n >= 5){ ans += n/5; n /= 5; } return ans; } }
0.0分
3 人评分
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:732 |
C二级辅导-进制转换 (C语言代码)浏览:615 |
C语言训练-自由落体问题 (C语言代码)浏览:1736 |
【绝对值排序】 (C语言代码)浏览:713 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:624 |
Wu-求圆的面积 (C++代码)浏览:1887 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:633 |
C语言训练-数字母 (C语言代码)浏览:601 |
DNA (C语言代码)浏览:736 |
永远的丰碑 (C语言代码)浏览:517 |