我什么时候得到5? 1 / i + 1 / i + 1

时间:2018-02-03 16:50:05

标签: for-loop

在'我'做什么我得到总和= 5? 我的代码: -ps我是初学者。

int sum = 0;
for (int i = 1; sum < 5; i++) {
sum =  sum + 1/i;
}

2 个答案:

答案 0 :(得分:0)

这是一个比你想象的更棘手的问题,原因有两个:

  1. 对于i> gt的所有迭代1,你根本不会改变总和。这是因为i和1都是整数。这意味着使用整数除法计算1 / i。整数除法总是将数字向下舍入到最接近的整数。 1 / i将导致所有i的0> 1.

  2. 此时你可能会认为程序会永远运行,答案是“总和永远不会变成5”,但是,这里有第二个效果,整数溢出。简单整数(例如int数据类型)具有最大值。如果将int增加到超出其最大值,则最终将得到其最小值。这是由于2的补码(https://en.wikipedia.org/wiki/Two%27s_complement)。这意味着我将变为负数,1 / i将导致一些负数aaa,这个问题突然变得更加棘手。

  3. 简短回答:我不知道,但这个问题很棘手。

答案 1 :(得分:0)

sum需要声明为double,因为integer会处理截断所有小数。
1/i需要double进行类型转换,因为iinteger,因此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);