#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
.