taiPyのお悩み解決ブログ

日々の発見をまとめます!

Javaの解答例:B - Integer Division Returns , モノグサプログラミングコンテスト2024(AtCoder Beginner Contest 345)

はじめに

自分用の備忘録

問題

B - Integer Division Returns

B - Integer Division Returns

上記のリンクを参考にしてください。

解答例

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        long X = sc.nextLong();

        long answer = 0;
        if (X >= 0.0) {
            answer = (X + 9) / 10;   
        } else {
            answer = X / 10;
        }
        System.out.println(answer);
    }
}

解説

このコードは、ユーザーから入力された整数Xを10で割るというシンプルなタスクを実行します。ただし、Xが正の場合と負の場合で異なる動作をします。

  1. 正の場合: Xが正の場合、まずXに9を加えます。その後、結果を10で割ります。これにより、Xが10の倍数でない場合でも、結果はXを10で割った値よりも1大きくなります。例えば、Xが15の場合、(15+9)/10は2.4となり、long型にキャストすることで結果は2となります。

  2. 負の場合: Xが負の場合、Xをそのまま10で割ります。この場合、余りは無視され、結果はXを10で割った値となります。例えば、Xが-15の場合、-15/10は-1.5となり、long型にキャストすることで結果は-1となります。

最後に、計算結果を出力します。このコードは、整数の除算を行う際の丸めの違いを示しています。具体的には、正の数では切り上げ(天井関数)、負の数では切り捨て(床関数)を行っています。これは、Javaの整数除算が切り捨てを行うことを利用したものです。この挙動は、他の多くのプログラミング言語でも同様です。この問題は、プログラミング言語のこのような特性を理解し、それを利用して問題を解決する能力を試すものと言えるでしょう。

参考文献

atcoder.jp