读入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.);
}
}
}
展开
 我来答
手机用户89972
推荐于2018-04-30
知道答主
回答量:2
采纳率:0%
帮助的人:2.7万
展开全部
1,n 均为int 型,加了括号先计算(1/n)则结果取int型。
不加(),1显示转换为float型, 则计算为float型 /int 型 , int 会隐式转换为float型参加运算,结果为float型。 由于加不加()导致了强制类型转化的先后不同, 1/n 如果用Int 型计算的话 这一步运算数值已经出现偏差了。
ps:验证,(float)(1.0/n)*flag 这样写结果就不会错
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式