一种改进的pow(x,y)

来源:互联网 发布:topview数据 编辑:程序博客网 时间:2024/05/05 11:14
#include <iostream>#include <cstdlib>#include <ctime>using namespace std;/*This is a free Program, You can modify or redistribute it under the terms of GNU*Description:一种改进的求整数x的y次幂*Language: C++*Development Environment: VC6.0*Author: Wangzhicheng*E-mail: 2363702560@qq.com*Date: 2012/10/14*//*核心方法是利用乘方的性质当x求出,x^2=x*x,当x^2求出,x^4=(x^2)*(x^2) ,依次类推*/const int max=100000000;  //底数最大的数class Power {private:int base;       //底数int exponent;    //指数long result;    //存放结果public:Power(int b,int e) {if(b<0 || b>=max) {cerr<<"底数应该大于等于0且小于"<<max<<endl;exit(1);}if(e<0 || e>max/10000) {cerr<<"指数应该大于等于0且小于"<<(max/10000)<<endl;exit(1);}base=b;exponent=e;}void power() {int result=1;power(exponent,result);setResult(result);show();}void power_common() {int i;int result=1;for(i=0;i<exponent;i++) {result=result*base;}setResult(result);show();}void show() {if(result<0) {cerr<<"结果溢出!"<<endl;result=0;return;}cout<<"power("<<base<<","<<exponent<<")="<<result<<endl;}private:void setResult(int r) {result=r;}void power(int exponent,int &result) {int pre=1;     //前面值int temp=base;    //每一位对应的权值while(exponent) {if(exponent%2) {result=pre*temp;pre=result;}temp=temp*temp;exponent/=2;}}};void main() {srand(unsigned(time(0)));int i;int x,y;const int N=10;for(i=0;i<N;i++) {x=rand()%(N*N);y=rand()%N;Power power(x,y);power.power();power.power_common();}}