重写x的n次方函数

来源:互联网 发布:哨兵向导耽美小说知乎 编辑:程序博客网 时间:2024/04/28 15:57

环境:vs2010,C++

三种不同的方式,power1为直接相乘n次;power2为递归实现;PowerFun模仿STL中pow库函数实现,效率比较高。

#include <iostream>#include <time.h>//#include <algorithm>using namespace std;int PowerFun(int x, unsigned int n){int result = 1;if(n != 0){while ((n & 1) == 0){n >>= 1;x *= x;}result = x;n >>= 1;while (n != 0){x *= x;if((n & 1) != 0)result *= x;n >>= 1;}}return result;}int power1(int x, unsigned int n)  {      int result = 1;      while (n--)          result *= x;      return result;  } int power2(int x, unsigned int n)  {      if (n == 0)          return 1;      else if (n == 1)          return x;      else       {          if (n % 2 == 1)              return power2(x, n / 2) * power2(x, n / 2) * x;          else              return power2(x, n / 2) * power2(x, n / 2);      }  } int main(){int nFloor = 2;int count = 30;clock_t clock_begin, clock_end;clock_begin = clock();for (int i = 0; i < count; i++)printf("%d的%d次方为    %d \n", nFloor, i, PowerFun(nFloor, i));clock_end = clock();printf("共耗时%d毫秒\n", clock_end - clock_begin);clock_begin = clock();for (int i = 0; i < count; i++)printf("%d的%d次方为    %d \n", nFloor, i, power1(nFloor, i));clock_end = clock();printf("共耗时%d毫秒\n", clock_end - clock_begin);clock_begin = clock();for (int i = 0; i < count; i++)printf("%d的%d次方为    %d \n", nFloor, i, power2(nFloor, i));clock_end = clock();printf("共耗时%d毫秒\n", clock_end - clock_begin);system("pause");return 0;}


原创粉丝点击