我正在尝试计算从1/(1^2)
到1/(n^2)
的所有数字的总和,其中n
是用户输入的整数。我可以编译程序,但我不知道我在哪里犯了逻辑错误,我得到的唯一结果是1.0
。提前谢谢!
public static double compute_series (int num)
{
double sum = 0, denom = 0;
for (int n=1; n <= num; n++){
denom = 1/n*n;
sum = sum + denom;
}
return(sum);
}
答案 0 :(得分:4)
你正在进行分组。
denom = 1/n*n
会为0
的所有n>1
(自1/n < 1
)和1
返回n==1
。因此,你获得的总和是1。
将您的代码更改为
denom = 1.0/(n*n);
答案 1 :(得分:0)
1
和n
是int
s,因此1/n*n
使用整数除法进行评估,并且始终被截断为0
。您可以使用double
字面值1.0
代替1
来避免此问题。
此外,由于除法和乘法具有相同的优先顺序,因此您应该在乘法周围使用括号:
public static double compute_series (int num) {
double sum = 0, denom = 0;
for (int n=1; n <= num; n++){
denom = 1.0/(n*n); // Note the changes here
sum += denom;
}
return(sum);
}