基于visual Studio2013解决面试题之0710求方优化
题目
解决代码及点评
/* 假设我们求 2^32,指数是 32,那么我们需要进行 32 次循环的乘法。但是我们在求出 2^16 以后,只需要在它的基础上再平方一次就可以求出结果。同理可以继续分解 2^16。也就是 a^n=a^(n/2)*a^(n/2),(n 为偶数);或者 a^n=a^((n-1)/2)*a^((n-1)/2)*a,(n 为奇数)。这样就将 问题的规模大大缩小,从原来的时间复杂度 O(n)降到现在的时间复杂度 O(logn)。可以用递 归实现这个思路. */ #include <iostream> using namespace std; /* 优化的Power函数 */ double MyPower(double base, unsigned int absExp) { if (absExp == 0) { return 1; } if (absExp == 1) { return base; } double dblResult = 1.0 * base; int i; // 对2的n次方部分快速进行 for (i = 2; i <= absExp; i*=2) { dblResult *= dblResult; } // 剩余的部分再一个个乘法 for (int j = 0; j < absExp - i/2; j++) { dblResult *= base; } return dblResult; } int main() { cout<<MyPower(2,7)<<endl; system("pause"); return 0; }
代码下载及其运行
代码下载地址:http://download.csdn.net/detail/yincheng01/6704519
解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果