【问题标题】:when do I get the sum 5? 1/i + 1/i+1我什么时候能得到总和 5? 1/i + 1/i+1
【发布时间】:2018-02-03 16:50:05
【问题描述】:

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

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

【问题讨论】:

  • 尝试在 for 循环之前声明 i 并在 for 循环之后打印值以了解相同的情况。
  • 请再次查看how to askon-topic,如果您有任何问题,请提供您的代码mvce
  • 整数除法:1/2 = 0,1/3=0, 1/4=0, ... - 从不

标签: for-loop


【解决方案1】:

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

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

  2. 1234563简单的整数,例如 int 数据类型,有一个最大值。如果你增加一个 int 超过它的最大值,你最终会得到它的最小值。这是由于 2 的补码 (https://en.wikipedia.org/wiki/Two%27s_complement)。这意味着 i 将变为负数,而 1/i 将导致某个负数 aaa 并且这个问题突然变得更加棘手。

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

【讨论】:

  • 非常感谢!我使用了双打,它终于奏效了!再次感谢您!
【解决方案2】:

sum 需要声明为double,因为integer 将截断所有小数。
1/i 需要类型转换为double,因为iinteger,所以1/i 将被视为integer,因此它将为i=1 提供1,为所有@ 提供0 987654331@ 值。

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);

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 2022-07-13
    • 2014-12-12
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2017-05-17
    相关资源
    最近更新 更多