
读入1 个正整数 n(n<=100),计算并输出1-1/2+1/3-1/4+……的前n项和(四舍五入保留小数4位)。
importjava.util.Scanner;publicclassTest40004{publicstaticvoidmain(String[]args){intri...
import java.util.Scanner;
public class Test40004 {
public static void main(String[] args) {
int ri, repeat;
int i, n, flag;
float sum;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri<=repeat; ri++){
n=in.nextInt();
/*--------------------*/
sum=0;
flag=1;
for(i=1;i<=n;i++){
sum+=(float)(1/i)*flag;【为啥有(1/i)这个括号答案就不对了呢?】
flag=-flag;
}
System.out.println((long)(sum*10000+0.5)/10000.);
}
}
} 展开
public class Test40004 {
public static void main(String[] args) {
int ri, repeat;
int i, n, flag;
float sum;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri<=repeat; ri++){
n=in.nextInt();
/*--------------------*/
sum=0;
flag=1;
for(i=1;i<=n;i++){
sum+=(float)(1/i)*flag;【为啥有(1/i)这个括号答案就不对了呢?】
flag=-flag;
}
System.out.println((long)(sum*10000+0.5)/10000.);
}
}
} 展开
1个回答
展开全部
1,n 均为int 型,加了括号先计算(1/n)则结果取int型。
不加(),1显示转换为float型, 则计算为float型 /int 型 , int 会隐式转换为float型参加运算,结果为float型。 由于加不加()导致了强制类型转化的先后不同, 1/n 如果用Int 型计算的话 这一步运算数值已经出现偏差了。
ps:验证,(float)(1.0/n)*flag 这样写结果就不会错
不加(),1显示转换为float型, 则计算为float型 /int 型 , int 会隐式转换为float型参加运算,结果为float型。 由于加不加()导致了强制类型转化的先后不同, 1/n 如果用Int 型计算的话 这一步运算数值已经出现偏差了。
ps:验证,(float)(1.0/n)*flag 这样写结果就不会错
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询