Swift中判断一个数是否为2的幂的实现方法求助
Swift实现判断一个数是否为2的幂并输出指定结果
我来帮你搞定Swift版本的实现,完全贴合你要的输出格式~
首先明确核心逻辑:一个正整数是2的幂的充要条件是,它的二进制表示里只有一个1,且数值大于0。利用位运算特性,我们可以用n & (n - 1) == 0快速验证这个条件(减去1会把最右边的1翻转为0,后面的0全翻转为1,与运算后结果为0)。
下面是完整的Swift实现,包含判断逻辑和你需要的格式化输出:
func checkPowerOfTwo(_ input: Int) { // 先排除非正整数的情况 guard input > 0 else { print("No") return } // 判断是否为2的幂 if (input & (input - 1)) == 0 { // 高效计算对应的指数:利用Int的leadingZeroBitCount属性 let exponent = input.bitWidth - input.leadingZeroBitCount - 1 print("Yes 2^\(exponent)=\(input)") } else { print("No") } } // 示例调用,完全匹配你的测试需求 checkPowerOfTwo(4) // 输出: Yes 2^2=4 checkPowerOfTwo(7) // 输出: No checkPowerOfTwo(32) // 输出: Yes 2^5=32 checkPowerOfTwo(64) // 输出: Yes 2^6=64 checkPowerOfTwo(16) // 输出: Yes 2^4=16
代码细节解释:
- 判断逻辑:
input & (input - 1) == 0是判断2的幂的经典位运算方法,时间复杂度O(1),同时我们先确保input是正整数——0和负数不可能是2的幂。 - 指数计算:
input.leadingZeroBitCount会返回数字二进制中最高位1左侧的0的个数,结合Int的总位数bitWidth,用bitWidth - leadingZeroBitCount - 1就能直接算出对应的指数,比循环移位或对数计算更准确(对数容易因浮点数精度出问题)。 - 输出格式:严格按照你要求的格式输出,完美适配4、8、16等目标测试用例。
如果需要处理超大范围的数字,只需把代码里的Int换成UInt64,逻辑完全通用。
内容的提问来源于stack exchange,提问作者YoungLee Chan
相关产品推荐
相关产品推荐

