C ++中的Woodall编号

在这个问题中,我们得到了一个数字,我们的任务是检查该数字是否为Woodall数字。

Woodall数字是一种特殊的数字,其形式为

Wn = n.2n -1

第一5伍德尔号码1,7,23,63,159

让我们举个例子来了解这个问题,

输入值

X = 159

输出结果

Yes

为了解决这个问题,我们将观察该数字,如果该数字是偶数,则它不能是Woodall,然后检查该数字。要进行检查,请将数字加1,然后将数字递归除以2。在每次除法计数后,可将其除尽。并在每个点检查计数是否等于数字。

展示我们解决方案实施情况的程序,

示例

#include <iostream>
using namespace std;
bool isWoodallNumber(int x){
   if (x % 2 == 0)
      return false;
   if (x == 1)
      return true;
   x+= 1;
   int p = 0;
   while(x%2 == 0){
      x = x/2;
      p++;
      if (p == x)
         return true;
   }
   return false;
}
int main() {
   int x = 1424;
   cout<<x;
   (isWoodallNumber(x))?cout<<" is a Woodal Number":cout<<" is not a Woodal Number";
   return 0;
}

输出结果

1424 is not a Woodal Number