問題文
解答例
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
float m = scanner.nextFloat();
float p = scanner.nextFloat();
float temp = m - (m * p / 100.0F);
float q = scanner.nextFloat();
System.out.println(temp - (temp * q / 100.0F));
}
}
}
補足
- m, p, qは全て整数だが、最終的に実数の計算を行うため初めからfloatとして取得して計算している
- 当然intとして取得して計算時にfloatかdoubleにキャストするようなやり方でもよい
- 面倒だったのでtempという変数名を使ったが、こういう名前の付け方は正直あんまりよくない
- 浮動小数点演算になるので、解答例だと厳密に正しい計算結果は得られない(参考)。今回の問題は
真値との誤差が0.0001 未満
で正解としてくれるのでこれでもよいが、より厳密な計算結果が欲しい場合はBigDecimalを使うとよい- ただしBigDecimalによる計算は結構遅かった気がするので、実務等で本当に必要かどうかは要件と相談
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
BigDecimal m = BigDecimal.valueOf(scanner.nextInt());
BigDecimal p = BigDecimal.valueOf(scanner.nextInt());
BigDecimal temp = m.subtract(m.multiply(p).divide(BigDecimal.valueOf(100)));
BigDecimal q = BigDecimal.valueOf(scanner.nextInt());
System.out.println(temp.subtract(temp.multiply(q).divide(BigDecimal.valueOf(100))));
}
}
}