程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 數值的整數次方,數值整數次方

數值的整數次方,數值整數次方

編輯:C++入門知識

數值的整數次方,數值整數次方


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

這道題目有以下幾點需要注意:

根據以上4個注意點,我們可以寫出求指數的程序,代碼如下: 

 1 #include<iostream>
 2 #include<stdlib.h>
 3 using namespace std;
 4 
 5 //全局變量,測試時檢查它,用於判斷輸入正確與否 
 6 bool g_InvalidInput = false;
 7 
 8 //由於精度原因,double類型的變量不能用等號判斷兩個數是否相等,因此需要寫equsl函數
 9 bool equal(double num1, double num2)
10 {
11     if((num1 - num2)>-0.0000001 && (num1 - num2) < 0.0000001)
12         return true;
13     else
14         return false;
15 }
16 
17 //方法1采用循環  
18 double PowerWithUnsignedExponent(double base, unsigned int exponent)
19 {
20     double result = 1.0;
21     for(int i = 1; i<=exponent; ++i)
22         result *= base;
23 
24     return result;
25 }
26 
27 //方法2 采用遞歸 
28 double PowerWithUnsignedExponent1(double base, unsigned int exponent)
29 {
30     if(exponent == 0)
31         return 1;
32     if(exponent == 1)
33         return base;
34 
35     //位運算代替除以2,位運算的效率比乘除法及求余運算的效率要高很多 
36     double result = PowerWithUnsignedExponent1(base, exponent >> 1);
37     result *= result;
38 
39     if(exponent & 0x1 == 1) //位與,代替求余%來判斷一個數是奇數還是偶數 
40         result *= base;
41         
42     return result ;
43 }
44 
45 double Power(double base, int exponent)
46 {
47     g_InvalidInput = false;
48 
49     //如果底數為0且指數小於0,則表明是非法輸入。
50     if(equal(base, 0.0) && exponent < 0)
51     {
52         g_InvalidInput = true;   //此時全局變量變為true 
53         cout<<"invalid input"<<ends;
54         return 0.0;
55     }
56     
57     //判斷指數正負,取指數的絕對值
58     unsigned int absExponent = (unsigned int)exponent;
59     if(exponent < 0)
60         absExponent = (unsigned int)(- exponent);
61             
62     //此處選擇使用方法2,使用方法1的話改下代碼就可以了。 
63     double result = PowerWithUnsignedExponent1(base, absExponent);
64     
65     //如果指數小於0則取倒數
66     if(exponent < 0)
67         result = 1.0 / result;
68 
69     return result;
70 }
71 int main()
72 {
73     double num1=Power(2.0,-2);  //0.25
74     double num2=Power(2.0, 2);  //4
75     double num3=Power(0.0, 2);  //0
76     double num4=Power(0.0, 0);  //無意義,這裡選擇輸出1 
77     
78     cout<<num1<<endl;
79     cout<<num2<<endl;
80     cout<<num3<<endl;
81     cout<<num4<<endl;
82     
83     cout<<endl;
84     
85     //無效輸入 返回0 
86     double num5=Power(0, -2);
87     cout<<num5<<endl;
88 
89     return 0 ;
90 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved