0
Кредитный калькулятор
Показывает скрытые ошибки, хотя результат в задаче верный import java.util.Scanner; public class Program { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int amount = scanner.nextInt(); for (int month = 6; month >= 1; month--) { amount = amount - (int)Math.round(amount*0.1); } System.out.println(amount); } }
5 odpowiedzi
+ 5
Ivan Golenovich Use Math.ceil instead of Math.round
And take amout as double.
double amount= scanner.nextDouble();
for(int month=6; month >= 1; month--) {
amount = amount - Math.ceil(amount * 0.1);
}
System.out.print((int) amount);
+ 4
Долго разбирался, ответ нашел методом тыка.
В общем этот код при вводе amount = 100000 дает НЕ правильный ответ 53145:
for (int i = 0; i < 6; i++) {
amount = (int) (amount - Math.ceil(amount / 10));
}
System.out.println(amount);
А вот этот код при вводе 100000 дает правильный ответ 53144:
for (int i = 0; i < 6; i++) {
amount = (int) (amount - Math.ceil(amount * 0.1));
}
System.out.println(amount);
Вся разница в "/ 10" или "* 0,1". По идее одно и тоже, но для JAVA видимо это важно. Почему, я так и не понял, если есть кто понимающий - объясните.
+ 3
Тоже промаялся с этим заданием
for(int i = 0; i < 3; i++) {
amount = amount - amount * 10 / 100; // ВОТ ТАК ВЕРНО!
amount = amount - amount / 100 * 10; // А ВОТ ТАК НЕТ!
}
+ 2
Разница между /10 и *0.1 к ответу Андрея:
Скорее всего дело в этом
/10 - целочисленное деление
Поэтому например результат выражения 14/10=1.4, округляется до 1
В примере с 100000 нет чисел с плавающей точкой
Но при операциях с длинными числами такое происходит из за того, что в памяти может храниться ограниченное количество битов информации (в двоичном формате)
И в какой то момент число начинает округляться
Если есть кто более понимающий - объясните
+ 1
Июль 2021:
import java.util.Scanner;
public class Program
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int amount = scanner.nextInt();
int proc = amount;
for(int i = 0; i<3; i++) {
int pay = ((amount*10)/100);
proc = amount - pay;
amount = proc;
}
System.out.println(proc);
}
}