はじめに
自分用の備忘録
問題
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
が正の場合と負の場合で異なる動作をします。
正の場合:
X
が正の場合、まずX
に9を加えます。その後、結果を10で割ります。これにより、X
が10の倍数でない場合でも、結果はX
を10で割った値よりも1大きくなります。例えば、X
が15の場合、(15+9)/10
は2.4となり、long
型にキャストすることで結果は2となります。負の場合:
X
が負の場合、X
をそのまま10で割ります。この場合、余りは無視され、結果はX
を10で割った値となります。例えば、X
が-15の場合、-15/10
は-1.5となり、long
型にキャストすることで結果は-1となります。
最後に、計算結果を出力します。このコードは、整数の除算を行う際の丸めの違いを示しています。具体的には、正の数では切り上げ(天井関数)、負の数では切り捨て(床関数)を行っています。これは、Javaの整数除算が切り捨てを行うことを利用したものです。この挙動は、他の多くのプログラミング言語でも同様です。この問題は、プログラミング言語のこのような特性を理解し、それを利用して問題を解決する能力を試すものと言えるでしょう。