让我们考虑一下我们有一个整数 n。问题是检查这个整数的二进制等价物中是否具有交替模式。交替模式表示 101010…。方法如下:计算 num = n XOR (n >> 1),现在如果 num 的所有位都是 1,则 num 具有交替模式。示例 实时演示 #include #include 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
让我们考虑一下我们有一个整数 n。问题是检查这个整数的二进制等价物中是否具有交替模式。交替模式表示 101010…。方法如下:使用二进制等价物检查每个数字,如果两个连续数字相同,则返回 false,否则返回 true。示例 #include using namespace std; bool hasAlternatePattern(unsigned int n) { int previous = n % 2; n = n/2; while (n > 0) { int current = n % 2; if (current == previous) // 如果当前位与前一位相同 return false; previous = current; n = n / 2; } return true; } int main() { unsigned int number = 42; if(hasAlternatePattern(number)) cout
假设我们有一个数字。如果可以将其表示为两个丰数之和,则打印这些数字,否则打印 -1。如果数字的所有真因数之和(用 sum(n) 表示)大于该数字的值,则称该数字为丰数。为了解决这个问题,我们将所有丰数存储到一个集合中,对于给定的数字 n,运行一个从 i = 1 到 n 的循环,并检查 n 和 (n – i) 是否为丰数。示例 #include #include #define N 100005 using namespace std; set getAbundantSet() { ... 阅读更多