C言語:奇数桁と偶数桁の合計の差が0かどうかを判定するプログラム
長い整数が1つ与えられたとき、奇数番目の位置にある桁の合計と偶数番目の位置にある桁の合計の差が0になるかどうかを判定する問題を考えます。ここでいう位置とは、最も左の桁を0番目として数えたものです。
例として、156486という数を見てみましょう。奇数番目の位置の桁の合計は (5 + 4 + 6) = 15、偶数番目の位置の桁の合計は (1 + 6 + 8) = 15 となり、両者は一致します。
この問題には2つの解き方があります。1つ目は、数の先頭から末尾まで順に走査し、位置を交互に切り替えながらそれぞれの合計を求めて差を計算する方法です。2つ目はよりシンプルで効率的な方法で、数学的な性質を利用します。ある整数が11で割り切れるならば、この差は必ず0になります。つまり、「奇数番目の桁の合計と偶数番目の桁の合計が等しい」ことと「その数が11の倍数である」ことは同値なのです。これは11の倍数の判定法としてよく知られた性質です。
アルゴリズム
isDiffZero(n)
begin
もし n が11で割り切れるならば
return 1
そうでなければ
return 0
end if
endC言語による実装例
#include<stdio.h>
long isDiffZero(int n) {
if(n % 11 == 0){
return 1;
} else {
return 0;
}
}
main() {
int n;
printf("Enter a number: ");
scanf("%d", &n);
if(isDiffZero(n)) {
printf("Difference is zero");
} else {
printf("Difference is non zero");
}
}実行結果
Enter a number: 156486 Difference is zero
このように、入力された数が11で割り切れる場合(例:156486 = 11 × 14226)には「Difference is zero」と表示され、奇数番目と偶数番目の桁の合計の差が0であることが確認できます。11で割り切れない場合は「Difference is non zero」と表示されます。走査して合計を取る方法では各桁を処理する必要がありますが、11の剰余をチェックするだけの方法なら定数時間で判定できるため、はるかに効率的です。
-
OneNoteとOneNote for Windows 10の違いを徹底解説
Windows 10には、無料で利用できる「OneNote for Windows 10」というOneNoteアプリが標準搭載されています。このアプリを使えば、OneDrive(個人用・ビジネス用の両アカウント対応)との複数デバイス間同期、手書きノートの検索、コンテンツのメール送信など、さまざまな操作が可能です。 一方で、「OneNote デスクトップアプリ」(OneNote 2016)と呼ばれる別バージョンのOneNoteも存在します。同じ名前を持つアプリがなぜ2つあるのか、そして両者にはどのような違いがあるのか、詳しく見ていきましょう。 OneNoteとOneNote for Window
-
Pythonで奇数桁と偶数桁の合計の差を判定するプログラム
この記事では、与えられた問題を解決するための解法とアプローチについて詳しく解説します。 問題文 整数が1つ与えられたとき、奇数桁の合計と偶数桁の合計の差が0であるかどうかを判定する必要があります。 素朴なアプローチ(ブルートフォース) 最も単純な方法は、数値を構成するすべての偶数桁と奇数桁の合計をそれぞれ計算し、その差を求めることです。しかし、この方法では各桁を順番に処理するため、桁数に比例した計算時間が必要になります。 効率的なアプローチ:11の倍数判定を活用 計算時間を削減するために、「暗算の数学」でよく知られている性質を利用します。それは「ある整数の奇数桁の合計と偶数桁の合計の差が0にな