zoukankan      html  css  js  c++  java
  • 【校招面试 之 剑指offer】第16题 数值的整数次方

    方法1:直接求解,但是要注意特殊情况的处理:即当指数为负,且底数为0的情况。

    #include<iostream>
    using namespace std;
    
    template<typename T>
    T myPow(T a, int m){
    	double base = 1;
    	int flag = (m < 0) ? -1 : 1;
    	int n = (m < 0) ? -m : m;
    
    	while(n > 0){
    		base = base * a;
    		n --;
    	}
    	if(flag == -1){
    		if(a != 0){
    			return (1/base);
    		}
    		cout<<"当指数为负时,0不能作为底数!"<<endl;
    		exit(-1);
    	}
    	return base;
    }
    int main(){
    
    	double a = 0;
    	// int a = 2;
    	int n = 10;
    	cout<<"求"<<a<<"的"<<n<<"次方为:"<<myPow(a, n)<<endl;
    	system("pause");
    	return 0;
    }
    

    方法2:可以归纳出下面的公式进行求解,使得循环次数大幅减小。也要注意特殊情况的处理:即当指数为负,且底数为0的情况。 

        an/2*an/2    n为偶数

    a=                                     

         a(n-1)/2*a(n-1)/2*a    n为奇数

    #include<iostream>
    using namespace std;
    
    // 符号处理(符号处理放在递归方法中出现问题,所以拿了出来)
    template<typename T>
    double myPow1(T a, int m){
    	int flag = (m < 0) ? -1 : 1;
    	int n = (m < 0) ? -m : m;
    	double result = myPow2(a, n, flag);
    	cout<<result<<endl;
    	if(flag == -1){
    		if(a != 0){
    			return (1/result);
    		}
    		cout<<"当指数为负时,0不能作为底数!"<<endl;
    		exit(-1);
    	}
    	return result;
    }
    template<typename T> T myPow2(T a, int n, int flag){ double result; if(n == 0){ return 0; } if(n == 1){ return a; } if(n%2 == 0){ result = myPow2(a, n/2, flag) * myPow2(a, n/2, flag); }else{ result = myPow2(a, (n-1)/2, flag) * myPow2(a, (n-1)/2, flag) * myPow2(a, 1, flag); } return result; } int main(){ double a = 0; // int a = 2; // int n = 8; int n = -10; cout<<"求"<<a<<"的"<<n<<"次方为:"<<myPow1(a, n)<<endl; system("pause"); return 0; }

      

  • 相关阅读:
    帆软 控件内容 清除
    Spring MVC 拦截器
    jsp文件调用本地文件的方法(Tomcat server.xml 设置虚拟目录)
    Junit 4 测试中使用定时任务操作
    通过URL传递PDF名称参数显示PDF
    SpringMVC 无法访问到指定jsp页面可能的原因
    优化小技巧——复杂属性对象的read模式
    [as部落首发]网页游戏开发中的一些小技巧
    Flash Platform 游戏开发入门
    理解 Flash 中的 ActionScript 3 调试
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/9364478.html
Copyright © 2011-2022 走看看