C++ 中的伍德沃尔数


在算法题中,给定一个数字,我们的任务是检查该数字是否是伍德沃尔数字。

伍德沃尔数字是一种特殊类型的数字,其形式为:

Wn = n.2n -1

前 5 个伍德沃尔数字是1、7、23、63、159

我们举一个例子来理解算法题:

输入

X = 159

输出

Yes

为了解决算法题,我们将观察该数字,如果该数字为偶数,则它不可能是伍德沃尔数字,然后检查该数字。要检查,将数字加 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

更新于:17-7-2020

180 查看

开启你的 职业

完成课程即可获得认证

开始
广告
© . All rights reserved.