成都教育行业网站建设,网站建设记入什么科目,京东网站制作优点,企业文化培训心得体会问题描述 满足 N!的末尾恰好有 区 个o的最小的 N 是多少? 如果这样的 N 不存在输出 -1。 输入格式 一个整数 区。 输出格式 一个整数代表答案。 样例输入 样例输出 10 评测用例规模与约定 对于 30% 的数据,1K106 对于 100% 的数据,1K1018 运行限制 最大运行时…问题描述 满足 N!的末尾恰好有 区 个o的最小的 N 是多少? 如果这样的 N 不存在输出 -1。 输入格式 一个整数 区。 输出格式 一个整数代表答案。 样例输入 样例输出 10 评测用例规模与约定 对于 30% 的数据,1K106 对于 100% 的数据,1K1018 运行限制 最大运行时间:3s最大运行内存:512M 解题思路计算阶乘末尾有多少个0可以找到一定的规律
数值末尾多少01022043061002420049
可以看到末尾有多少0与5的倍数有关。
计算100末尾有多少0:
100/520
20/54
2044
计算200末尾有多少0
200/540
40/58
8/51
408149
所以计算阶乘末尾有多少0可以用
int count0;
while(n0)
{nn/5;countn;}
return count;
来实现。
求阶乘这道算法题的思路为根据给出的用例范围进行二分查找代入上述方法里。
其中9e18代表9*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();//末位0的个数long l 1;long r (long)9e18;while (l r) {//找符合条件的最小值long mid (lr)/2;if (getF(mid) k) {r mid;} else {l mid 1;}}if (getF(r) k) {System.out.println(r);} else {System.out.println(-1);}}public static long getF(long num) {long ans 0;while (num 0) {ans num / 5;num / 5;}return ans;}
}