LeetCode-Easy部分中标签为Math 231. Power of Two

    xiaoxiao2021-03-25  89

    原题

    Given an integer, write a function to determine if it is a power of two.

    题目分析

    最直接的方法利用幂和对数是一对互逆操作,对输入的数求对数,如果结果为整数,则为true,否则为false。 这个题按照这样分析是非常简单的,但是如此计算,隐藏如下几个陷阱: 1. 如果输入为0,返回false ,这种情况要考虑到。 2. 如果输入为负数,如-16,很明显不存在2的几次幂等-16。

    代码分析

    直接求对数

    if (n == 0) return false; //考虑0 double d = Math.Log(n, 2); if (double.IsNaN(d))//考虑-16这种情况 return false; //注意小于1e-10 return Math.Abs(Convert.ToInt32(d) - d) < 1e-10 ? true : false;

    取余法 如果不大于0,则返回false; 当n大于1时,n对2取余,若大于0,返回false,n减半更新,重复以上检查,所有检查都没有出现余数,则返回true。

    public bool IsPowerOfTwo(int n) { if (n<=0) return false; while (n>1) { if (n % 2 > 0) return false; n /= 2; } return true; }

    更多标签为Math的题目

    http://blog.csdn.net/daigualu/article/details/69101448

    转载请注明原文地址: https://ju.6miu.com/read-17595.html

    最新回复(0)