需要帮助编写一个函数,为我提供数字的所有状态
need help for write a function that give me all the states of a number
>我有一个 192 位的数字。 我想要两个写一个函数,给我这个数字的所有状态,如下所示:
1) 所有状态与一位 1
2) 具有两位的所有状态 1
3) 所有具有三位的状态 1
.
.
.
依此类推,直到所有位均为 1我也想把这部分写在一个单独的文件中。
我刚刚写了所有 1 位放在一起的状态。例如:(对于 16 位数字)0000000000000011---->然后我把位向左移动。但是我找不到一个好方法给我两个位的所有状态。
(我在C中使用奇迹库来表示这个大数字)
你有什么想法吗?谢谢:)
您可以使用 6 个 for 循环(192/32 位),它们遍历 uint32 的所有值在每个 for 循环中,您可以将 uint32 乘以某个值以获得正确的值,如下所示:
for(uint32_t i = 0; i < 0xFFFFFFFF; i++) {
for(uint32_t j = 0; j < 0xFFFFFFFF; j++) {
bignumber = j + 0xFFFFFFFF*i
print(bignumber)
}
}
或者,如果你想按位做这件事,你可以在for循环中做一些位掩码
我不知道你的函数。 但是,如果您有 num 和 shiftLeft 和 equals 函数,它可以是这样的
for (int i=0;i<192;i+=2)
{
num->assing(0b11);
num->shiftLeft(i*2);
if (num->andOperand(victim)->equals(num))
{
//this is the number has two consecutive 11, and only
}
if (num->andOperand(victim)->biggerAndEqual(0b11))
{
//this is the number has at least one , two consecutive 11
}
}
正如问题所述,有 ((2 ^ 192) - 1) 数字要打印,因为除了不包含1
位之外0
所有排列都被覆盖。这显然是不可能的,所以问题必须要求设置连续位。正如 @n.m. 所写,首先让它使用 4 位。然后将其扩展到 192 位。要移动一个数字,你需要把它加倍。此解决方案无需进行任何位移位或乘法即可工作 - 仅通过加法(除了 printbits()
中的位掩码。
#include<stdio.h>
#define BITS 4
unsigned printmask;
void printbits (unsigned num) {
int i;
for (i=0; i<BITS; i++) {
if (num & printmask)
printf ("1");
else
printf ("0");
num = num + num;
}
printf (" ");
}
int main() {
unsigned num, bits;
int m, n;
printmask = 1; // prepare bit mask for printing
for (n=1; n<BITS; n++)
printmask = printmask + printmask;
num = 1;
for (n=0; n<BITS; n++) {
bits = num;
for (m=n; m<BITS; m++) {
printbits (bits);
bits = bits + bits;
}
printf ("n");
num = num + num + 1;
}
return 0;
}
程序输出
0001 0010 0100 1000
0011 0110 1100
0111 1110
1111
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 需要帮助编写一个函数,为我提供数字的所有状态