Ibr*_*ter 4 java recursion square-root
我的任务是编写一个程序,提示用户输入一个正a整数和一个n大于2 的整数
,并将正整数的第n个根的值打印a到屏幕上,精确到100个位置.我曾经Math.pow能够获得根,我觉得我已经做好了一切.唯一的问题是,每次我运行我的程序时,输出的是1.0,无论什么数字I输入a和n.我的代码有什么问题?
import java.util.Scanner;
import java.lang.Math;
public class Q8 {
public static void main(String[] args) {
System.out.println("Enter a positive number: ");
Scanner in = new Scanner(System.in);
double a = in.nextDouble();
System.out.println("Enter an integer greater than 2: ");
Scanner in2 = new Scanner(System.in);
int n = in.nextInt();
System.out.println(pow (a,n));
}
private static double pow(double a, int n) {
if (n == 0){
return 1;
}
else{
double sum = Math.pow(a,(1/n));
return sum;
}
Run Code Online (Sandbox Code Playgroud)
为什么答案总是1.0?
替换1/n为1.0/n.
你得到整数除法,所以无论是什么n,如果它是2或更高,那么1/n就是零.然后你将你的数字提高到零功率,这给了1.
更换1与1.0使分割成浮点除法-也就是说,结果不会被截断成整数.这就是你想要的.
首先,我假设那样
double sum = Math.pow(a,(1/root));
Run Code Online (Sandbox Code Playgroud)
应该
double sum = Math.pow(a,(1/n));
Run Code Online (Sandbox Code Playgroud)
因为root代码中没有变量.
其次,对于每个整数n> 1,1/n会给出0.因此,sum将为1.0.您应该将其替换为:
double sum = Math.pow(a,(1.0/n));
Run Code Online (Sandbox Code Playgroud)
要么
double sum = Math.pow(a,(1/(double)n));
Run Code Online (Sandbox Code Playgroud)
为了得到双变量的除法.
| 归档时间: |
|
| 查看次数: |
2285 次 |
| 最近记录: |