C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で「/」と「%」演算子を使わずに数値が5の倍数かどうかを判定する方法


この記事では、ある数値が5で割り切れるかどうかを判定する方法を紹介します。通常であれば「num % 5 == 0」のように剰余演算子(%)を使えば簡単に判定できますが、ここでは「/」(除算)および「%」(剰余)の演算子を一切使用せずに判定を行います。

判定の考え方

5の倍数には重要な特徴があります。それは「一の位(最後の桁)が必ず 0 または 5 になる」という点です。したがって、数値の末尾の桁が 0 か 5 であれば、その数は5で割り切れると判断できます。それ以外の場合は5の倍数ではありません。

さらに、この方法では数値を文字列として扱うため、long long 型などの整数型の範囲を超えるような非常に大きな数値でもオーバーフローを気にせず判定できるという大きなメリットがあります。

サンプルコード

#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 関数は、文字列として渡された数値を受け取り、まずその文字列の長さ n を取得します。次に、末尾の文字(num[n - 1])が '5' でも '0' でもない場合は false を返し、どちらかに該当すれば true を返します。

main 関数では、33桁にもなる巨大な数値を文字列として渡して判定しています。このように、標準的な整数型では表現できない大きな数値に対しても、本手法なら確実に5の倍数かどうかを判定できます。

  1. C++で巨大な数値が15で割り切れるかどうかを判定する方法

    本記事では、ある数値が15で割り切れるかどうかを判定する方法を解説します。ここで扱う数値は非常に大きいため、通常の整数型では表現しきれず、文字列として扱います。 15の倍数判定の考え方 数値が15で割り切れるためには、「5で割り切れる」かつ「3で割り切れる」という2つの条件を満たす必要があります。これは、15 = 5 × 3 であり、5と3が互いに素であるためです。 5で割り切れる条件: 最後の桁(1の位)が「0」または「5」であること 3で割り切れる条件: 各桁の数字の合計が3で割り切れること C++での実装例 #include <bits/stdc++.h> using n

  2. Pythonで算術演算子を使わずにxが2のn乗で割り切れるか判定する方法

    問題の概要二つの整数 x と n が与えられたとき、算術演算子(+、-、*、/、%など)を使わずに、x が 2 の n 乗(2^n)で割り切れるかどうかを判定します。例えば、入力が x = 32、n = 5 の場合、32 = 2^5 であるため、出力は True になります。解法の考え方この問題はビット演算を使うことでエレガントに解くことができます。ポイントは以下の通りです。2^n で割り切れる数は、2進数表現において下位 n ビットがすべて 0 になっています。(1 << n) - 1 を計算すると、下位 n ビットだけが 1 になったマスクが得られます(例:n = 5 なら 0