标签:长度 else 错误 out 类型 exce net one ann
题目要求:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
本张图片借鉴于 https://blog.csdn.net/sodacoco/article/details/81606974 ,真得写得非常好
这个题的难点在于把所有情况都理清楚,并且做到非常的直观。
并且在第4中情况中,对于幂次的计算,还需要有高效算法需要掌握的
//错误代码,我不知道为什么总是有错,一直没找到原因
1 import java.util.*; 2 import java.lang.Math; 3 public class Solution { 4 public double Power(double base, int exponent) { 5 double result=1.0; 6 int exp = exponent;//原来的变量长度太长 7 if(base==0.0){ 8 if(exp == 0){ 9 System.out.print("定义不存在"); return -1.0; 10 } 11 else if(exp >0) return 0.0; 12 else System.out.print("分母不能为0"); return -1.0; 13 } 14 if(base != 0.0 && exp == 0) return 1.0; 15 exp = exp>0 ? exp : -exp; 16 while(exp!=0){ 17 if( (exp&1) == 1 ) result *= base; 18 base*=base; 19 exp >>= 1; 20 } 21 return exp>=0?result:(1/result); 22 } 23 }
正确的代码
1 import java.lang.Math; 2 import java.util.*; 3 public class Solution{ 4 public static double Power(double base, int n) { 5 double res = 1,curr = base; 6 int exponent; 7 if(n>0){ 8 exponent = n; 9 }else if(n<0){ 10 if(base==0) 11 throw new RuntimeException("分母不能为0"); 12 exponent = -n; 13 }else{// n==0 14 return 1;// 0的0次方 15 } 16 while(exponent!=0){ 17 if((exponent&1)==1) 18 res*=curr; 19 curr*=curr;// 翻倍 20 exponent>>=1;// 右移一位 21 } 22 return n>=0?res:(1/res); 23 } 24 public static void main(String [] args){ 25 Scanner sc = new Scanner(System.in); 26 System.out.println("请输入一个double类型的浮点数base"); 27 double base = sc.nextDouble(); 28 System.out.println("请输入一个int类型的整数exponent"); 29 int exponent = sc.nextInt(); 30 double result = Power(base,exponent); 31 System.out.println("base的exponent次方的结果是"+ result); 32 } 33 34 }
标签:长度 else 错误 out 类型 exce net one ann
原文地址:https://www.cnblogs.com/shareidea94/p/11109677.html