数字的二进制。如何检查相等的数字系列?
Posted
技术标签:
【中文标题】数字的二进制。如何检查相等的数字系列?【英文标题】:Binary of a number. How to check for equal series of digits? 【发布时间】:2021-12-31 11:43:38 【问题描述】:这是我的代码。我想要做的是将一个数字转换成他的二进制,如果有一系列相等的数字来 cout false 否则 cout true。例如,数字是 7,它是二进制 111,它应该 cout 为假。但是如果数字是 10,它的二进制是 10000,应该是假的,所以我的代码是真的,我不知道我的错误在哪里。
#include <iostream>
using namespace std;
void hasAlternatingBits(unsigned n)
int* a = new int[n];
int i;
for (i = 0; n > 0; i++)
a[i] = n % 2;
n = n / 2;
/*for (i = i-1; i >= 0; i--)
cout << a[i];
*/
int arrSize = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < arrSize; i++)
if (a[i] != a[i + 1])
cout << "true";
else
cout << "false";
delete[] a;
int main()
int n;
cin >> n;
hasAlternatingBits(n);
return 0;
【问题讨论】:
请用准确的话解释您的问题,因为“相等的数字系列”不清楚,而且您的两个示例都是......错误的? 相等的数字序列是 0,0 或 1,1。在整个数组中,我应该至少有 2 个相等的系列,比如 10110 - 这里我应该打印 false,因为我有 1,1。 True 是 101, 1, 0。new int[n]
分配过多。例如 7 是 0b111
,它的二进制长度是 3。改为声明 new int[64]
。接下来,i
必须初始化为 0
并递增。这会给你计数。接下来,sizeof(a)
是指针的大小。数到arraySize - 1
,因为您要求[i + 1]
又不行了。
请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
【参考方案1】:
让我们从这段代码开始:
int* a = new int[n];
int i;
for (i = 0; n > 0; i++)
a[i] = n % 2;
n = n / 2;
除了你过度分配 a 的事实,我猜这没关系。
然而,这很奇怪:
int arrSize = sizeof(a) / sizeof(a[0]);
这就是我要做的。我会更改一些变量名。
int arraySize;
for (arraySize = 0; n > 0; arraySize ++)
a[arraySize] = n % 2;
n = n / 2;
然后完全摆脱int arrSize
,因为变量arraySize
具有您存储在数组中的确切数字。请注意,您计算 arraySize 的版本存在缺陷。
接下来,这个循环:
for (int i = 0; i < arraySize; i++)
if (a[i] != a[i + 1])
cout << "true";
else
cout << "false";
您将引用已存储变量的末尾。你可以尝试的是:
bool theyAllAlternate = true;
for (int i = 1; theyAllAlternate && i < arraySize; ++i)
if (a[i-1] == a[i])
theyAllAlternate = false;
然后根据theyAllAlternate
的值输出。但是,我实际上不明白这是否是您真正想要做的。根据位是否从一个数字翻转到另一个数字,您的代码会打印出一系列真/假、真/假——但您超出了位的末尾。
我不确定这就是你真正想要的。
另请注意:十进制 10 == 二进制 1010。(8 + 2)。
【讨论】:
以上是关于数字的二进制。如何检查相等的数字系列?的主要内容,如果未能解决你的问题,请参考以下文章