gpt4 book ai didi

c - 如何每 x 位插入零

转载 作者:行者123 更新时间:2023-11-30 17:02:56 26 4
gpt4 key购买 nike

I 代表一个由 1 和 0 组成的正方形,带有一个整数类型变量。它可能如下所示:

1 1 1 0
0 1 0 0
0 0 0 0
0 0 0 0

对应的整数从右下角到左上角编码,左上角对应2^0。该网格的整数表示为:0000 0000 0010 0111 (2) = 39(10)

网格始终是宽度已知的正方形。在我的代码中,我需要多次将宽度增加 1,从而将 map 更改为:

1 1 1 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

这相当于每 x = 宽度位插入一个 0(示例中宽度 = 4)。不会发生溢出,因为整数的大小远大于所需的大小。

在 C 语言中,如何每 x 位插入一个零?

编辑1:由于此操作将在多个网格上多次发生,因此应避免循环。

Edit2:我使用这种包装的原因是因为我在网格之间进行按位运算来搜索组合。

最佳答案

以十进制数的每第四位加 0 的方式来看待问题。您将以十进制形式执行的操作是:

1 513 650 -> 105 130 650

您可以看到,您只是保留小于 10^3 的数字并将其余数字乘以 10。而不是保留小于 10^7 的数字(不是 10^6,因为您已经相乘)并将右侧相乘并排 10....

对于二进制文件,其工作方式相同。

    #include <iostream>
#include <cmath>

int power(int x, int n){
return n == 1 ? x : x*power(x,n-1);
}

int main(int argc, char const *argv[])
{
int n = 4;
int grid = 1024;
int grid_len = std::floor(std::log2(grid)) ; // what is the position of last 1, = how long i need to insert 0
for (int steps = 0; steps*n < grid_len; ++steps)
{
std::cout << steps << std::endl;
int preserve = grid % power(2,n*(steps+1) );
grid = (grid - preserve) * 2;
grid += preserve;
}
std::cout << grid << std::endl;

return 0;
}

代码打印 71,二进制为 1000111,因此它适用于您提供的示例。

关于c - 如何每 x 位插入零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com