1
3
您可以使用以下(未测试)功能检查输入编号的每个位。
它使用位与函数检查变量$var中位置$pos处的位。为了简洁起见,我将向您展示4位数字。
如果我想检查数字3的位置0(最右边的一位),我会这样调用函数:
在内部,checkbit将把常量1向左移动0次,因为我传入了一个0。然后,它将按位与(&)返回我输入的结果,3。由于3=0011和1=0001,结果为真,因为第0位在位和运算符的两个参数中都设置。 |
2
7
你可以得到数字的二进制表示,1表示包含2的幂,0表示不包含 即
这是经过测试的,工作正常,但在PHP中可能有更好的语法方法。 |
3
3
根据我的经验,递归比循环有更多的开销,所以我建议继续使用循环解决方案。 |
4
1
如果只做了一点明智的操作(例如“num&0x001”),并检查该操作的值是否为零,那么通过这些位进行跳变应该是很简单的,如下所示: (我知道这是在Java中,但我不知道PHP,反正它并不是PHP特有的问题)
像这样的事情在任何语言中都应该是微不足道的。 |
5
1
另一种将整数分解为2的幂的方法是继续除以2并求余数。 例如: 25/2=12 r 1,功率=2^0=1 12/2=6 r 0,功率=2^1=2 6/2=3 r 0,功率=2^2=4 3/2=1 r 1,功率=2^3=8 1/2=0 r 1,功率=2^4=16 所以这里25=1+8+16,因为这是剩下的只有1的地方。
|
6
0
除非你的数字非常稀疏(也就是说,数字数组很小),否则在所有的能量下工作可能会更快。保持在2号基地:
|
jkfe · 为什么println会在这段递归代码中执行? 2 年前 |
Jimmy · 这种算法怎么能按顺序遍历树“爬上”树呢? 2 年前 |
AvirukBasak · gcc中无return语句的尾部递归 2 年前 |
Dharmik Patel · 使用python递归完全可以整除 2 年前 |
W.tan · 一维最短距离递归算法 2 年前 |
ncarrawa · 将1添加到i(递归)时出现类型错误 2 年前 |
Eren · Python递归何时返回[duplicate] 2 年前 |