在Java中计算正整数的第n个根
我的任务是编写一个程序,提示用户输入一个正双精度在Java中计算正整数的第n个根,java,recursion,square-root,Java,Recursion,Square Root,我的任务是编写一个程序,提示用户输入一个正双精度a和一个整数 n大于2,并将正整数的第n个根的值a打印到屏幕上,精确到100位。我使用了Math.pow来获得根,我觉得好像我做的每件事都是对的。唯一的问题是,每次我运行程序时,输出都是1.0,无论我为a和n输入什么数字。我的代码有什么问题 import java.util.Scanner; import java.lang.Math; public class Q8 { public static void main(String[]
a
和一个整数
n
大于2,并将正整数的第n个根的值a
打印到屏幕上,精确到100位。我使用了Math.pow
来获得根,我觉得好像我做的每件事都是对的。唯一的问题是,每次我运行程序时,输出都是1.0
,无论我为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;
}
为什么答案总是1.0?将
1/n
替换为1.0/n
你得到的是整数除法,所以无论n
是什么,如果是2或更高,那么1/n
都是零。然后你将你的数字提高到零次方,这将给出1
将
1
替换为1.0
将使除法变成浮点除法-也就是说,结果不会被截断为整数。这就是你想要的。首先,我假设
double sum = Math.pow(a,(1/root));
应该是
double sum = Math.pow(a,(1/n));
因为代码中没有根变量
其次,对于每一个n>1的整数,1/n将为0。因此,总和为1.0。
您应将其替换为:
double sum = Math.pow(a,(1.0/n));
或
为了得到双变量的除法。我没有看到在这个表达式中定义了root
:Math.pow(a,(1/root))
。这是什么?@icza这是个打字错误。root
应该是n
或者n
应该是root
。使用双精度
永远不会得到100位小数。请允许我介绍一下BigDecimal
?pow
对函数来说是一个糟糕的名字。我如何合并BigDecimal?前提是root
也是一个整数,否则它是一个浮点运算,不管文本的类型如何。对。在我看来,OP希望根
和n
相同,只是键入了其中一个错误。根应该是n,而不是根。尽管如此,这还是奏效了!好的,因为你刚刚编辑了你的问题,我编辑了我的答案来匹配它。是的,我编辑了!谢谢你的帮助,真是个愚蠢的错误!
double sum = Math.pow(a,(1/(double)n));