C++で巨大な数値が5で割り切れるかどうかを判定する方法
この記事では、ある数値が5で割り切れるかどうかを判定する方法を解説します。ここで扱うのは非常に大きな数値であるため、通常の整数型(int や long long)では表現しきれません。そこで、数値を文字列として受け取って処理します。
5の倍数の判定ルール
5で割り切れるかどうかは、実はとても簡単に判定できます。数値の最後の桁(1の位)が「0」または「5」であれば、その数は必ず5で割り切れるというのが割り算の基本ルールです。
例えば、「154484585745184258458158245285265」のような桁数の多い数値でも、末尾が「5」になっているため、実際に割り算を行わなくても即座に5の倍数だと分かります。
アルゴリズムの手順
判定の手順は以下の通りです。
- 数値を文字列として受け取る。
- 文字列の長さを取得し、最後の文字(末尾の桁)を調べる。
- 末尾が「0」または「5」であれば true を返し、それ以外なら false を返す。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
bool isDiv5(string num){
int n = num.length();
if(num[n - 1] != '5' && num[n - 1] != '0')
return false;
return true;
}
int main() {
string num = "154484585745184258458158245285265";
if(isDiv5(num)){
cout << "Divisible";
}else{
cout << "Not Divisible";
}
}
実行結果
Divisible
コードの解説
isDiv5 関数では、まず num.length() で文字列の長さを取得し、num[n - 1] によって末尾の文字にアクセスしています。末尾の文字が「5」でも「0」でもない場合は false を返し、どちらかに該当すれば true を返します。
この手法のメリットは、数値の桁数に関係なく O(1) の定数時間で判定できる点です。巨大な整数を扱う際にも効率的であり、多倍長整数ライブラリを使う必要もありません。
-
Pythonで数値が19で割り切れるかどうかを判定する方法
非常に大きな数値が与えられたとき、その数値が19で割り切れるかどうかを判定したいケースがあります。 例えば、入力が 86982 の場合、出力は「Divisible(割り切れる)」となります。 アルゴリズムの考え方:繰り返し加算法 この問題は「繰り返し加算法」と呼ばれる手法で解くことができます。この方法では、数値から末尾の1桁を取り出し、それを2倍した結果を残りの数値に加えるという操作を、数値が2桁になるまで繰り返します。そして最終的に得られた2桁の数値が19で割り切れるかどうかを調べます。 具体的な手順 数値が100以上である間(number // 100 が0でない間)、次の処理を繰り返し
-
Pythonで数値が17で割り切れるかどうかを判定する方法
ある数値が与えられたとき、その数値が17で割り切れるかどうかを判定する必要があるとします。例えば、入力が 99943 の場合、出力は「Divisible(割り切れる)」となります。解法のアプローチ:繰り返し減算法この問題は「繰り返し減算法」と呼ばれる手法で解くことができます。具体的には、数値の末尾の桁を取り出し、残りの数値から「末尾の桁 × 5」を引くという操作を、数値が2桁になるまで繰り返します。最終的に得られた2桁の数値が17で割り切れるなら、元の数値も17で割り切れることになります。この方法が成り立つ理由は、数値を「10a + b」(aは末尾の桁を除いた部分、bは末尾の桁)と表したとき、