laijiewo @ 2024-02-29 12:08:38
小白求问大佬们为什么一开始n设为int会超时,改成double就可以了?
import java.util.Scanner;
public class P1035 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double Sn = 0;
int k = scanner.nextInt();
for (double n = 1.0; Sn <= k; n ++) {
Sn += 1/n;
if (Sn >= k) {
System.out.println((int) n);
return;
}
}
scanner.close();
}
}
by 杜都督 @ 2024-02-29 12:23:52
int与int进行运算结果还是int,所以Sn += 1/n;
的右值表达式1/n
在n为int类型时最终结果还是int
当循环来到n>=2时,1/n
的值将恒为0,则Sn的值恒不变,最终导致死循环
@laijiewo
by laijiewo @ 2024-02-29 17:53:16
@杜都督 感谢大佬orz,再看一遍发现循环内条件写错了Sn应该>k,题目里的条件测试里竟然没有。