C++输入一个正整数,判断该数是否包含有重复的数字
时间: 2024-11-05 10:32:46 浏览: 58
在C++中,判断一个正整数是否含有重复的数字,可以采用位操作的方式,因为每个数字转换成二进制后,相同的数字会对应相同的位置。下面是一个简单的步骤:
1. 将输入的正整数转换为无符号长整型(`unsigned long long`),因为计算机底层通常使用这种数据类型表示整数。
2. 对这个无符号长整型取按位与(`&`)操作,逐位与0xFFFFFFFFLL(最大32位无符号整数,即二进制所有位都为1的情况)。这样每次操作都会清除已经检查过的位。
3. 遍历这个按位与的过程,如果发现某个位置在最后一位(也就是最左边)还为1,则说明这个位对应的数字在原数中有重复,因为只有当该位上有一个以上的1时才会保持不变。
4. 如果遍历结束后所有位都被清零了,那么结论是没有重复的数字。
以下是示例代码:
```cpp
#include <iostream>
#include <climits>
bool hasDuplicate(int num) {
int mask = 0xFFFFFFFFLL; // 32位无符号整数的最大值
while (num != 0) {
int bit = num & 1;
if (bit == 0) return false; // 如果当前位是0,说明没有重复
mask >>= 1; // 移除已检查的最低位
num >>= 1; // 移除最低位并右移
}
return true; // 未找到重复,但可能有最高位的1(如10进制的9)
}
int main() {
int input;
std::cout << "请输入一个正整数:";
std::cin >> input;
if (hasDuplicate(input))
std::cout << "数字包含重复数字。\n";
else
std::cout << "数字没有重复数字。\n";
return 0;
}
```
阅读全文