P1035 TLE java 小白求解

P1035 [NOIP2002 普及组] 级数求和

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,题目里的条件测试里竟然没有。


|