zoukankan      html  css  js  c++  java
  • 判断一个整数是否为另一个整数的幂数

         最近在学习微软推出的虚拟课程中关于网络上最火的20个关于c#的问题,写下关于对于这个问题的个人理解和解决思路,请各位看官笑纳.

    题目为:(原)判断一个数字是否2的幂数?

    这是我个人还没看正确答案前自己的解决思路(一个小控制台程序),代码如下:

      static void Main(string[] args)
            {
                for (int increment = 0; increment < 100000; increment++)
                {
                    if (IsPower(increment))
                    {
                        Console.WriteLine(increment);
                    }
                }
                Console.ReadKey();
            }
       
            private static bool IsPower(int number)
            {
                bool result = false;
                if (number <= 0 || number % 2 == 1) return false;
    
                if (number / 2 > 1)
                {
                    result = IsPower(number / 2);
                }
                else
                {
                    result = number % 2 == 0;
                }
                return result;
            }
    View Code

    我的解决思路是利用递归方法,方法自己调用自己 ,知道最后一次调用方法不是1就是0来判断是否为幂数.
    下面是微软所提供的解决方案:

          static void Main(string[] args)
            {
                for (int increment = 0; increment < 100000; increment++)
                {
                    if (isPowerFromMic(increment))
                    {
                        Console.WriteLine(increment);
                    }
                }
                Console.ReadKey();
            }
       
            private static bool isPowerFromMic(int number)
            {
                return number >1 && ((number & (number - 1)) == 0);
            }
    View Code

    顿时看了他们的解决方案后,感觉自己的解决方案弱爆了的感觉,囧! 这个思路还是依靠着计算机二进制的原理,如下图:

     

    我简要说明下:就是当每次向前近位后第一位总是为1,而后面的位数皆为0,如8&7 = 0.相信各位还是很容易理解的.

    由此可以借题发挥,不由得想到是不是可以出个题目(微软的这个方法似乎不利于拓展,稍稍修改了自己的代码):

    判断一个整数是另一个数的幂数?而不止于2呢?

      static void Main(string[] args)
            {
                while (true)
                {
                    int baseNumber = Int32.Parse(Console.ReadLine());
                    int powerNumber = Int32.Parse(Console.ReadLine());
                    Console.WriteLine(IsPower(baseNumber, powerNumber));
                }
            }
    
            private static bool IsPower(int number, int powerNumber)
            {
                bool result = false;
                if (number <= 0 || number % powerNumber != 0) return false;
    
                if (number / powerNumber > 1)
                {
                    result = IsPower(number / powerNumber, powerNumber);
                }
                else
                {
                    result = number % powerNumber == 0;
                }
                return result;
            }
    View Code
  • 相关阅读:
    mysql5.7 linux安装参考
    谈谈微服务中的 API 网关(API Gateway)
    十大Intellij IDEA快捷键
    SqoopFlume、Flume、HDFS之间比较
    PostgreSQL-存储过程(一)基础篇
    spark调优篇-oom 优化(汇总)
    spark调优篇-数据倾斜(汇总)
    spark调优篇-Spark ON Yarn 内存管理(汇总)
    spark异常篇-OutOfMemory:GC overhead limit exceeded
    spark异常篇-Removing executor 5 with no recent heartbeats: 120504 ms exceeds timeout 120000 ms 可能的解决方案
  • 原文地址:https://www.cnblogs.com/linkinlu/p/3993817.html
Copyright © 2011-2022 走看看