12 数值的整数次方
Posted shareidea94
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12 数值的整数次方相关的知识,希望对你有一定的参考价值。
题目要求:给定一个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
以上是关于12 数值的整数次方的主要内容,如果未能解决你的问题,请参考以下文章