【发布时间】:2017-09-05 22:45:01
【问题描述】:
标题措辞很糟糕,但我想不出如何总结问题。
基本上,每个数字都可以通过添加 2 的幂来形成,其中每个数字最多出现一次。例如20=16+4、27=16+8+2+1等
确定一个给定数字是否出现在另一个数字的分解中的最有效方法是什么?
简单地计算要添加的完整数字集并查看数字是否出现在其中并不难。但一定有某种捷径,对吧?当我只需要验证给定数字的存在时,计算整个集合似乎有点过头了。
【问题讨论】:
-
你所说的“数字”到底是什么意思?这听起来像是一个奇怪的问题,但通常计算机上的数字已经存储为一堆 2 的幂的总和(这就是二进制)。
-
我认为您正在寻找的是
AND运算符。例如,在 Python 中,27 & 4等于 0,但27 & 8等于 8。此外,bin(27)会显示与数字 27 的每一位对应的所有 1 和 0。 -
这只是在不以二进制形式存储整数的计算机上真正存在的问题。但是,如果我们对基数
n进行概括,那么是的,您的基本选择是开始将数字除以n,直到达到所需的 n 进制数。
标签: algorithm performance math