LintCode_Pow(x, n)
2015-12-04 12:20
274 查看
问题描述:
算法设计:要特别注意n可为正,也可为负数
方法一:直观上,最简单的方法就是:根据参数n直接遍历循环,但是遍历次数多,时间长;
方法二:结合二分法和递归来做:
算法设计:要特别注意n可为正,也可为负数
方法一:直观上,最简单的方法就是:根据参数n直接遍历循环,但是遍历次数多,时间长;
public static double myPow(double x, int n) { if(x==0){ return 0; } if(x==1){ return 1; } if(n==0){ return 1; } if(n==1){ return x; } if(n==-1){ return 1/x; } double result=x; if(n>1){ for(int i=1;i<n;i++){ result=result*x; } return result; } if(n<-1){ int k=n*(-1); for(int i=1;i<k;i++){ result=result*x; } } return 1/result; }
方法二:结合二分法和递归来做:
public static double myPow2(double x, int n) { if(x==0){ return 0; } if(x==1){ return 1; } if(n==0){ return 1; } if(n==1){ return x; } if(n==-1){ return 1/x; } double result=1; int k=0; if(n>1){ k=n; }else{ k=n*(-1); } if(k%2==0){ result=myPow2(x,k/2); result=result*result; }else{ result=myPow2(x,(k-1)/2); result=result*result*x; } if(n<0){ result=1/result; } return result; }注,在写这个题的时候,想到一个利用二分法求n次开方的算法
public static double mySqur(double x,int n){ if(x==0){ return 0; } if(x==1){ return 1; } if(n==1){ return x; } double result=0.00001; double left=0; double right=x; while(result>0){ //二分法求解; result=(left+right)/2; System.out.println("result-->"+result); double y=result; int k=0; if(n>1){ k=n; }else{ k=n*(-1); } for(int j=1;j<k;j++){ y=y*result; } System.out.println("y-->"+y); if(y<x-0.001){ left=result; }else if(y>x+0.001){ right=result; }else{ break; } } if(n<0){ result=1/result; } return result; }
相关文章推荐
- 状态栏的隐藏与显示
- XCode模拟器上下黑边、显示不完整、适配问题
- 黑名单电话短信拦截实现
- @"Xtrace: Tracing NSObject will not trace all classes"
- 可重入函数
- Mysql命令大全
- Android--Fragment与Activity通信
- XCode模拟器上下黑边、显示不完整、适配问题
- 将数据库id变为从1开始
- android 进程间通信方式
- Iperf使用方法
- 学自慕课网:MySQL开发技巧
- listView的convertView复用引发的问题解决
- 字典转模型的三种方法之一:赋值法
- ----------------------------1164---------------类似于,前些天做的,闰年生日的那一道题._______________________________________
- Handler、Message、Looper三者之间的关系
- 值得推荐的C/C++框架和库 (真的很强大)
- px与dp的转化
- Android 中的 Service 全面总结
- C++链接MySQL数据库查询操作