問題へのリンク
解答コード
詳細
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final int M = scanner.nextInt();
final int P = scanner.nextInt();
final int Q = scanner.nextInt();
double answer = M * (100 - P) * (100 - Q);
answer /= 100.0 * 100.0;
System.out.println(answer);
scanner.close();
}
}
10進数計算
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final BigDecimal M = BigDecimal.valueOf(scanner.nextLong());
final BigDecimal P = BigDecimal.valueOf(scanner.nextLong());
final BigDecimal Q = BigDecimal.valueOf(scanner.nextLong());
BigDecimal unsolded = sold(M, P);
BigDecimal answer = sold(unsolded, Q);
System.out.println(answer);
scanner.close();
}
private static final BigDecimal HUNDRED = BigDecimal.valueOf(100);
private static BigDecimal sold(BigDecimal food, BigDecimal salePercentage) {
BigDecimal remainingPercentage = HUNDRED.subtract(salePercentage);
BigDecimal unsolded = food.multiply(remainingPercentage).divide(HUNDRED,4,RoundingMode.HALF_UP);
return unsolded;
}
}
}
詳細
人間はこじらせている人以外は10進数で計算を行いますが、コンピュータは2進数で計算を行います。循環小数になる条件が10進数と2進数で異なる為、基本的に整数計算で行い、最後に除算を行うと誤差が最小限に抑えられます。
具体的には、分母・分子が整数かつ約分済み分数表記を行った際に、分母が2の乗数で表記できるならば誤差は出ません。10進数の場合は、分母が2の乗数と5の乗数の