Программа для проверки наличия числа в ряду дает неожиданный результат

#java

#java

Вопрос:

Программа для проверки наличия данного числа в ряду арифметической прогрессии. Пользователь предоставляет T, который является номером ряда, который также предоставляет пользователь.

Пользователь предоставляет A, 1-й номер серии, B, номер для проверки наличия числа в серии и C, общее различие.

Код выполняется, но не отправляется онлайн (показывает ошибку времени выполнения). Кроме того, в каждом случае выводится «ДА».

 public class Main {
    public static void main(String args[]) {

        Scanner sc = new Scanner(System.in);
        double n;
        int k;
        int T = sc.nextInt(); //number of times series will be given by user.
        while (T != 0) {
            T -= 1;
            int A = sc.nextInt(); //1st term of the AP series
            int B = sc.nextInt(); //to check if this number(B) appears in the series
            int C = sc.nextInt(); //common difference
            if (A == B) {
                System.out.print("YES");
            }
            n = (((B - A) / C)   1); // if this formula is right then n should be 
            //an integer when B is present in series
            //or it n should be a float number if B is not in the series
            k = (int) n;
            if (k == n)
                System.out.println("YES");// even when B is NOT in series, "YES" is printed
            else
                System.out.println("NO");
        }
    }
}
  

Ответ №1:

Java отбрасывает остаток при делении целых чисел, поэтому, несмотря на объявление n как a double , оно всегда будет иметь целочисленное значение. Вы можете заменить C на (1.0 * C) , чтобы принудительно использовать деление с плавающей запятой, или использовать оператор modulo % , чтобы полностью обойти проблему.

Комментарии:

1. Вы также можете использовать (double) C .