如何比较数组元素,判断十进制转二进制后的数字是否相等
十进制转二进制判定逻辑实现
现有代码问题修正
你当前代码中的while (num != 0)属于冗余逻辑,内层for循环已经完成8位二进制位的计算,可直接删除该层while循环。
判定逻辑实现
根据你给出的示例推导,判定规则为:二进制有效位不存在相邻的相同数字,符合返回true,不符合返回false。逻辑实现步骤如下:
- 先找到8位二进制的最高有效位下标,排除前导0的干扰
- 从最高位开始逐位对比相邻两位的值,出现任意一组相等即判定为不满足规则
完整可运行代码
#include<iostream> using namespace std; int main() { int num; cin >> num; int arr[8] = {}; if ((num >= 0) && (num <= 255)) { // 转换为8位二进制,低位存在arr[0],高位存在arr[7] for (int i = 0; i < 8; i++) { arr[i] = num % 2; num = num / 2; } // 输出8位二进制 for (int i = 7; i >= 0; i--) cout << arr[i]; cout << endl; // 判定逻辑 bool res = true; // 先找最高有效位下标 int highest = 0; for (int i = 7; i >= 0; i--) { if (arr[i] == 1) { highest = i; break; } } // 从最高位往下对比相邻位 for (int i = highest; i > 0; i--) { if (arr[i] == arr[i-1]) { res = false; break; } } // 输出结果 cout << (res ? "true" : "false") << endl; } else { cout << "error" << endl; return 1; } system("pause"); return 0; }
测试验证
- 输入7:二进制输出
00000111,相邻位存在相同值,输出false,符合示例 - 输入5:二进制输出
00000101,相邻位无相同值,输出true,符合示例
内容的提问来源于stack exchange,提问作者Viki Mihailova
相关产品推荐
相关产品推荐

