數值得整數次方--模擬pow函式的功能
1.數值得整數次方
(1)當底數等於0且指數為負數時,錯誤;
(2)當底數任意,指數分為大於等於0,和小於0
1)指數>=0 ,直接求值;
2)指數<0,先給指數取絕對值,然後按照指數為正求值,最後給結果求倒數
程式碼:
#include<iostream>
using namespace std;
double fun(double bash,unsigned int tmp);
bool Zero(double bash,double num);
double Power(double bash,int exponent)
{
if (Zero(bash,0.0)&&(exponent<0))//當底數等於0且指數為負數時,錯誤;
{
printf("erro\n");
exit(EXIT_FAILURE);
}
unsigned int tmp=(unsigned int)exponent;//tmp用於儲存變為正數的次數
if (exponent<0)
{
tmp=(unsigned int)(-exponent);
}
double ret=fun(bash,tmp);//無論次數正負,統一用正次數求結果
if (exponent<0)//當次數時小於0的情況,返回結果的倒數
{
ret=1.0/ret;
}
return ret;//當次數時大於或者等於0的情況,直接返回結果
}
double fun(double bash,unsigned int tmp)//求次冪的值
{
double ret=1;
for (unsigned i=1;i<=tmp;i++)
{
ret*=bash;
}
return ret;
}
bool Zero(double bash,double num)//判斷底數是否等於0
{
if ((bash-num>-0.0000001)&&(bash-num<0.0000001))
{
return true;
}
return false;
}
int main()
{
//當底數>=0
cout<<Power(2.0,3)<<endl;
cout<<Power(2.0,-3)<<endl;
cout<<Power(0.0,3)<<endl;
//當底數<0
cout<<Power(-2.0,3)<<endl;
cout<<Power(-2.0,-3)<<endl;
//當底數<0&&次數<0
cout<<Power(0,-3)<<endl;
return 0;
}
執行結果:
2.求一個底數次冪值得優化
優化:上面的 求次冪的值需要迴圈次數 次,才可以求出該數的次方的值;
其實可以2倍的求:
a^n=a^(n/2)*a^(n/2)—n為偶數
a^n=a^(n/2)*a^(n/2)*a—-n為基數
double fun(double bash,unsigned int tmp)//求次冪的值
{
//特殊情況處理
if (tmp==0)
{
return 1;
}
if (tmp==1)
{
return bash;
}
//常規公式
double ret=fun(bash,tmp/2);//求a^(n/2)
ret*=ret;//次數為偶數,a^n=a^(n/2)*a^(n/2)
if (tmp%2!=0)//次數為奇數,在偶數的處理上在乘一次底數
{
ret=ret*bash;//a^n=a^(n/2)*a^(n/2)*a
}
return ret;//返回結果;
}
相關文章
- (函式分治法)實現pow函式(x的y次方冪)函式
- 劍指offer面試題11 數值的整數次方面試題
- 【演算法詳解】求解數值的整數次方演算法
- MySQL使用自定義變數模擬分析函式MySql變數函式
- 一個數number的n次冪 python的pow函式Python函式
- 【leetcode】劍指 Offer 16. 數值的整數次方LeetCode
- 演算法學習記錄十(C++)--->數值的整數次方演算法C++
- 整數取模類
- 使用java模擬scala函數語言程式設計將函式作為引數傳入方法中Java函數程式設計函式
- 聊聊四種Oracle數字取整函式Oracle函式
- strlen函式的模擬實現函式
- 函式定義、函式的引數、函式的預設引數函式
- 素數計數函式函式
- 演算法用連結串列模擬大整數加法運算演算法
- 函式引數 引數定義函式型別函式型別
- 實數的三次方根
- 【C語言】編寫一個函式,將一個數字字串轉換成該字串對應的數字(包括正整數、負整數)。C語言函式字串
- javascript函式引數和函式內同名變數的關係JavaScript函式變數
- 數學函式函式
- 模擬Promise的功能Promise
- 函式外與函式內的變數函式變數
- 表示素數的函式函式
- 資料結構之C語言模擬整數陣列實現資料結構C語言陣列
- 聚合函式與數字函式函式
- 數論函式群在數論多項式生成函式集上的作用函式
- 字元函式、數字函式和日期函式字元函式
- javascript模擬實現函式過載JavaScript函式
- JavaScript計算數字的多少次方JavaScript
- C語言atoi()函式:將字串轉換成int(整數)C語言函式字串
- 3.3.2 函式的預設引數和佔位引數 函式過載函式
- Javascript函式引數求值——Thunk函式JavaScript函式
- 函式基礎和函式引數函式
- numtoyminterval函式——數字轉換函式函式
- 數論函式(二)函式
- NumPy 數學函式函式
- [數學] 生成函式函式
- 函式的引數傳遞函式
- 13.1 函式中的變數函式變數