<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        My Github

      劍指Offer面試題:10.數值的整數次方

      一、題目:數值的整數次方

      題目:實現函數double Power(doublebase, int exponent),求base的exponent次方。不得使用庫函數,同時不需要考慮大數問題。

        在.NET Framework提供的BCL中,Math類實現了一個Pow方法,例如要求2的三次方,可以通過以下代碼實現:

          double result = Math.Pow(2, 3);

        本題就是要實現一個類似于該Pow方法的功能。

      二、解決思路與實現

      2.1 不加思索的思路

        不需要考慮大數問題,可以在30秒內想到的思路如下:

          public double Power(double baseNumber,int exponent)
          {
              double result = 1;
              for (int i = 1; i <= exponent; i++)
              {
                  result = result * baseNumber;
              }
      
              return result;
          }

        但是,上面的代碼沒有考慮到輸入的指數(exponent)小于1即是零和負數的時候怎么辦,它只考慮了指數是正數的情況。

      2.2 全面考慮的思路

       ?。?)當指數為負數的時候:可以先對指數求絕對值,然后算出次方的結果之后再取倒數。

        (2)當底數(base)是零且指數是負數的時候:通過全局代碼或異常告訴調用者參數有誤。

       ?。?)0的0次方的時候:由于0的0次方在數學上是沒有意義的,因此無論是輸出0還是1都是可以接受的。

          public static bool isInvalidInput = false;
      
          public static double Power(double baseNumber, int exponent)
          {
              isInvalidInput = false;
      
              // 當底數(base)是零且指數是負數的時候提示參數非法
              if (Equals(baseNumber, 0.0) && exponent < 0)
              {
                  isInvalidInput = true;
                  return 0.0;
              }
      
              uint absExponent = (uint)exponent;
              if (exponent < 0)
              {
                  absExponent = (uint)(-1 * exponent);
              }
      
              double result = PowerWithUintExponent(baseNumber, absExponent);
      
              // 當指數為負數的時候需算出次方的結果之后再取倒數
              if(exponent < 0)
              {
                  result = 1.0 / result;
              }
      
              return result;
          }
      
          private static double PowerWithUintExponent(double baseNumber, uint exponent)
          {
              double result = 1.0;
              for (int i = 1; i <= exponent; i++)
              {
                  result = result * baseNumber;
              }
      
              return result;
          }
      
          /// <summary>
          /// 在判斷底數base是不是等于0時,不能直接寫base==0,
          /// 這是因為在計算機內表示小數時(包括float和double型小數)都有誤差。
          /// </summary>
          private static bool Equal(double num1, double num2)
          {
              if (num1 - num2 > -0.0000001 &&
                  num1 - num2 < 0.0000001)
              {
                  return true;
              }
              else
              {
                  return false;
              }
          }

      細節:在判斷底數baseNumber是不是等于0時,不能直接寫baseNumber==0,這是因為在計算機內表示小數時(包括float和double型小數)都有誤差。判斷兩個小數是否相等,只能判斷它們之差的絕對值是不是在一個很小的范圍內。如果兩個數相差很小,就可以認為它們相等。

      三、單元測試

      3.1 測試用例

          // 底數、指數都為正數
          [TestMethod]
          public void PowerTest1()
          {
              Assert.AreEqual(PowerHelper.Power(2, 3), 8);
          }
      
          // 底數為負數、指數為正數
          [TestMethod]
          public void PowerTest2()
          {
              Assert.AreEqual(PowerHelper.Power(-2, 3), -8);
          }
      
          // 指數為負數
          [TestMethod]
          public void PowerTest3()
          {
              Assert.AreEqual(PowerHelper.Power(2, -3), 0.125);
          }
      
          // 指數為0
          [TestMethod]
          public void PowerTest4()
          {
              Assert.AreEqual(PowerHelper.Power(2, 0), 1);
          }
      
          // 底數、指數都為0
          [TestMethod]
          public void PowerTest5()
          {
              Assert.AreEqual(PowerHelper.Power(0, 0), 1);
          }
      
          // 底數為0、指數為正數
          [TestMethod]
          public void PowerTest6()
          {
              Assert.AreEqual(PowerHelper.Power(0, 4), 0);
          }
      
          // 底數為0、指數為負數
          [TestMethod]
          public void PowerTest7()
          {
              Assert.AreEqual(PowerHelper.Power(0, -4), 0);
              Assert.AreEqual(PowerHelper.isInvalidInput, true);
          }

      3.2 測試結果

       ?。?)測試通過結果

       ?。?)代碼覆蓋率結果

       

      posted @ 2015-08-24 23:58  EdisonZhou  閱讀(2807)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲综合91社区精品福利| 国产精品国产三级国产试看 | 一区二区三区精品偷拍| 最新精品国产自偷在自线| 亚洲最大成人在线播放| 国产一区二区三区AV在线无码观看| 女人被狂c躁到高潮视频| 久久成人 久久鬼色| 亚洲av中文乱码一区二| 毛片久久网站小视频| 寿宁县| 欧美成人精品| 日本深夜福利在线观看| 一区二区三区人妻无码| 国产日韩精品免费二三氏| 九九热在线观看视频精品| 99精品视频在线观看婷婷| 97人妻成人免费视频| 免费看一区无码无a片www| 国产精品一区中文字幕| 久久ww精品w免费人成| 精品自拍偷拍一区二区三区| 国产久免费热视频在线观看| 国产麻豆md传媒视频| 亚洲色av天天天天天天| 韩国美女福利视频一区二区| 欧美白妞大战非洲大炮| 蜜桃视频网站| 亚洲色偷偷偷网站色偷一区| 亚洲成人av在线资源| 四虎精品免费永久免费视频| 久久精品女人的天堂av| 色呦呦 国产精品| 天堂在线中文| 国产一区二区三区不卡观| 国产99视频精品免费视频36| 永平县| 国产免费无遮挡吸奶头视频| 精品无码午夜福利理论片| 一区二区中文字幕久久| 欧美精品在线观看视频|