奇数桁と偶数桁の合計の差が0かどうかを判定するJavaプログラム
問題文
与えられた長整数 n に対して、0番目から数えた奇数番目の桁の合計と、偶数番目の桁の合計との差が 0 になるかどうかを判定するプログラムを作成します。インデックスは 0 から始まるものとします。
例
n = 1212112 の場合 奇数番目の桁の合計 = 2 + 2 + 1 = 5 偶数番目の桁の合計 = 1 + 1 + 1 + 2 = 5 差 = 5 - 5 = 0 出力 = Yes
このように、両者の合計が一致していれば「Yes」、一致していなければ「No」が出力されます。
解法のポイント:11の倍数判定法との関係
この問題には、実はとても便利な数学的な性質があります。それは「11の倍数判定法」です。ある整数が 11 で割り切れるかどうかを調べる有名な判定法では、奇数桁の合計と偶数桁の合計の差が 0(または 11 の倍数)であれば、その数は 11 の倍数であるとされています。
つまり、n % 11 == 0 が成り立てば、奇数桁と偶数桁の合計の差は必ず 0 になります。この性質を利用すれば、各桁を一つずつ分解して合計を計算する複雑な処理は不要となり、たった 1 行の剰余演算で答えを導き出せます。
Javaでの実装例
class JavaTester {
public static int difference(int n){
return (n % 11);
}
public static void main(String args[]){
int n = 1212112;
System.out.println("Number: " + n);
System.out.println(difference(n) == 0 ? "Yes" : "No");
n = 12121121;
System.out.println("Number: " + n);
System.out.println(difference(n) == 0 ? "Yes" : "No");
}
}コードの解説
difference メソッドは、引数として受け取った整数 n を 11 で割った余りをそのまま返します。main メソッドでは、この戻り値が 0 であれば「Yes」を、そうでなければ「No」を出力します。三項演算子(? :)を使用することで、if 文による条件分岐を簡潔に 1 行で表現している点もポイントです。
出力結果
Number : 1212112 Output: Yes Number : 12121121 Output: No
1つ目の数 1212112 は奇数桁と偶数桁の合計がどちらも 5 で差が 0 となるため「Yes」。一方、2つ目の数 12121121 は差が 0 にならないため「No」と表示されます。
まとめ
奇数桁と偶数桁の合計の差が 0 かどうかの判定は、11 の倍数判定法を活用することで、n % 11 == 0 というシンプルな条件式だけで実現できます。文字列への変換やループによる桁の分解が一切不要なため、計算量も少なく、非常に効率的でエレガントな解法といえるでしょう。
-
GoとJavaの違いを徹底比較!特徴と使い分けのポイント
プログラミング言語を選ぶ際、「Go」と「Java」のどちらを採用すべきか迷う開発者は少なくありません。どちらもGoogleや企業システムで広く使われる人気言語ですが、設計思想や言語仕様には大きな違いがあります。本記事では、それぞれの言語の特徴を解説したうえで、両者の主な違いを比較表を使ってわかりやすく整理します。 GoとはGoはGoogleが開発した手続き型(プロシージャル)プログラミング言語です。プログラムはパッケージ単位で構成され、シンプルで読みやすいコード記述を重視した設計になっています。動的言語に近い柔軟なパターンを取り入れつつ、静的型付けによる安全性も兼ね備えています。また、軽量スレ
-
Pythonで奇数桁と偶数桁の合計の差を判定するプログラム
この記事では、与えられた問題を解決するための解法とアプローチについて詳しく解説します。 問題文 整数が1つ与えられたとき、奇数桁の合計と偶数桁の合計の差が0であるかどうかを判定する必要があります。 素朴なアプローチ(ブルートフォース) 最も単純な方法は、数値を構成するすべての偶数桁と奇数桁の合計をそれぞれ計算し、その差を求めることです。しかし、この方法では各桁を順番に処理するため、桁数に比例した計算時間が必要になります。 効率的なアプローチ:11の倍数判定を活用 計算時間を削減するために、「暗算の数学」でよく知られている性質を利用します。それは「ある整数の奇数桁の合計と偶数桁の合計の差が0にな