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

数値に代替パターンのビットがあるかどうかを確認します-C++でのSet-2O(1)アプローチ


整数nがあるとしましょう。問題は、この整数が2進数に相当する代替パターンを持っているかどうかを確認することです。代替パターンは101010…を意味します。

アプローチは次のようになります。num=nXOR(n>> 1)を計算します。ここで、numのすべてのビットが1の場合、numには交互のパターンがあります。

#include <iostream>
#include <algorithm>
using namespace std;
bool isAllBitSet(int n){
   if (((n + 1) & n) == 0)
      return true;
   return false;
}
bool hasAlternatePattern(unsigned int n) {
   unsigned int num = n ^ (n >> 1);
   return isAllBitSet(num);
}
int main() {
   unsigned int number = 42;
   if(hasAlternatePattern(number))
      cout << "Has alternating pattern";
   else
      cout << "Has no alternating pattern";
}

出力

Has alternating pattern

  1. 数値が回文であるかどうかをチェックするC++プログラム

    回文数は、桁が逆になっても同じままです。つまり、値は変わりません。回文数は対称とも呼ばれます。例:数字12321、1551、11などは、数字が逆になっても変わらないため、回文です。 番号が回文であるかどうかをチェックするプログラムは次のとおりです。 例 #include<iostream> using namespace std; void palindrome(int num) {    int rev=0,val;    val = num;    while(num > 0) {    

  2. 数が偶数か奇数かをチェックするC++プログラム

    数値は、2で割り切れる場合でも偶数であり、2で割り切れない場合は奇数です。 偶数のいくつかは-です 2, 4, 6, 8, 10, 12, 14, 16 奇数のいくつかは-です 1, 3, 5, 7, 9, 11, 13, 15, 17 モジュラスを使用して数値が偶数か奇数かを確認する モジュラスを使用して数値が偶数か奇数かを確認するプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() {    int num = 25;    if(num % 2 =