C語(yǔ)言求冪計(jì)算的高效解法
本文實(shí)例演示了C語(yǔ)言求冪計(jì)算的高效解法。很有實(shí)用價(jià)值。分享給大家供大家參考。具體方法如下:
題目如下:
給定base,求base的冪exp
只考慮基本功能,不做任何邊界條件的判定,可以得到如下代碼:
#include <iostream>
using namespace std;
int cacExp(int base, int exp)
{
int result = 1;
int theBase = 1;
while (exp)
{
if (exp & 0x01)
result = result * base;
base = base * base;
exp = exp >> 1;
}
return result;
}
int getRecurExp(int base, int exp)
{
if (exp == 0)
{
return 1;
}
if (exp == 1)
{
return base;
}
int result = getRecurExp(base, exp >> 1);
result *= result;
if (exp & 0x01)
result *= base;
return result;
}
int main()
{
for (int i = 1; i < 10; i++)
{
int result = cacExp(2, i);
//int result = getRecurExp(2, i);
cout << "result: " << result << endl;
}
return 0;
}
再來(lái)看看數(shù)值的整數(shù)次方求解方法:
#include <iostream>
using namespace std;
bool equalZero(double number)
{
if (number < 0.000001 && number > -0.000001)
return true;
else
return false;
}
double _myPow(double base, int exp)
{
if (exp == 0)
return 1;
if (exp == 1)
return base;
double result = _myPow(base, exp >> 1);
result *= result;
if (exp & 0x01)
result *= base;
return result;
}
double _myPow2(double base, int exp)
{
if (exp == 0)
return 1;
double result = 1;
while (exp)
{
if (exp & 0x01)
result *= base;
base *= base;
exp = exp >> 1;
}
return result;
}
double myPow(double base, int exp)
{
if (equalZero(base))
return 0;
if (exp == 0)
return 1;
bool flag = false;
if (exp < 0)
{
flag = true;
exp = -exp;
}
double result = _myPow2(base, exp);
if (flag)
{
result = 1 / result;
}
return result;
}
void main()
{
double base = 2.0;
int exp = -5;
double result = myPow(base, exp);
cout << "result: " << result << endl;
}
相信本文所述對(duì)大家C程序算法設(shè)計(jì)的學(xué)習(xí)有一定的借鑒價(jià)值。
相關(guān)文章
C++運(yùn)行時(shí)獲取類(lèi)型信息的type_info類(lèi)與bad_typeid異常
這篇文章主要介紹了C++運(yùn)行時(shí)獲取類(lèi)型信息的type_info類(lèi)與bad_typeid異常,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01
C++ 非遞歸實(shí)現(xiàn)二叉樹(shù)的前中后序遍歷
本文將結(jié)合動(dòng)畫(huà)和代碼演示如何通過(guò)C++ 非遞歸實(shí)現(xiàn)二叉樹(shù)的前中后序的遍歷,代碼具有一定的價(jià)值,感興趣的同學(xué)可以學(xué)習(xí)一下2021-11-11
C++ opencv ffmpeg圖片序列化實(shí)現(xiàn)代碼解析
這篇文章主要介紹了C++ opencv ffmpeg圖片序列化實(shí)現(xiàn)代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
詳解C/C++內(nèi)存區(qū)域劃分(簡(jiǎn)而易懂)
C/C++中,內(nèi)存主要分為、堆、棧、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)。本文重點(diǎn)給大家介紹C/C++內(nèi)存區(qū)域劃分的相關(guān)知識(shí),需要的朋友參考下吧2021-06-06
C語(yǔ)言詳細(xì)分析講解關(guān)鍵字enum與sizeof及typedef的用法
在?C?語(yǔ)言中經(jīng)常會(huì)見(jiàn)到?enum、sizeof、typedef,那么我們今天就來(lái)講解下它們?nèi)齻€(gè),enum是C語(yǔ)言中的一種自定義類(lèi)型,它是一種枚舉類(lèi)型,sizeof是編譯器的內(nèi)置指示符,用于計(jì)算類(lèi)型或變量所占內(nèi)存打小,typedef用于給一個(gè)已經(jīng)存在的數(shù)據(jù)類(lèi)型重命名,本質(zhì)上不能產(chǎn)生新的類(lèi)型2022-04-04
一篇文章帶你了解C++特殊類(lèi)的設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C++特殊類(lèi)的設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
C++設(shè)計(jì)模式編程之Flyweight享元模式結(jié)構(gòu)詳解
這篇文章主要介紹了C++設(shè)計(jì)模式編程的Flyweight享元模式結(jié)構(gòu),享元模式在實(shí)現(xiàn)過(guò)程中主要是要為共享對(duì)象提供一個(gè)存放的"倉(cāng)庫(kù)"(對(duì)象池),需要的朋友可以參考下2016-03-03
C語(yǔ)言實(shí)現(xiàn)酒店管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03

