在'我'做什么我得到总和= 5? 我的代码: -ps我是初学者。
int sum = 0;
for (int i = 1; sum < 5; i++) {
sum = sum + 1/i;
}
答案 0 :(得分:0)
这是一个比你想象的更棘手的问题,原因有两个:
对于i> gt的所有迭代1,你根本不会改变总和。这是因为i和1都是整数。这意味着使用整数除法计算1 / i。整数除法总是将数字向下舍入到最接近的整数。 1 / i将导致所有i的0> 1.
此时你可能会认为程序会永远运行,答案是“总和永远不会变成5”,但是,这里有第二个效果,整数溢出。简单整数(例如int数据类型)具有最大值。如果将int增加到超出其最大值,则最终将得到其最小值。这是由于2的补码(https://en.wikipedia.org/wiki/Two%27s_complement)。这意味着我将变为负数,1 / i将导致一些负数aaa,这个问题突然变得更加棘手。
简短回答:我不知道,但这个问题很棘手。
答案 1 :(得分:0)
sum
需要声明为double
,因为integer
会处理截断所有小数。
1/i
需要double
进行类型转换,因为i
为integer
,因此1/i
将被视为integer
所以它会给1对于i=1
,对于所有i>1
值为0。
double sum = 0;
int i = 0;
for (i = 1; sum < 5; i++) {
sum = sum + (double) 1/i;
}
System.out.println("Sum = 5 for i = "+i);