判斷一個整數是否為另一個整數的冪數


     最近在學習微軟推出的虛擬課程中關於網絡上最火的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM