2
0
paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」

【殿堂入りキャンペーン】残り物の量 (paizaランク C 相当) Java解答例

Posted at

問題文

解答例

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))));
		}
	}
}
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0