相关疑难解决方法(0)

为什么Java认为从10到99的所有数字的乘积都是0?

以下代码块将输出设为0.

public class HelloWorld{

    public static void main(String []args){
        int product = 1;
        for (int i = 10; i <= 99; i++) {
            product *= i;
        }
        System.out.println(product);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么会这样吗?

java integer integer-overflow

132
推荐指数
8
解决办法
3万
查看次数

当使用整数计算Java的阶乘100(100!)时,我得到0

这样做时:

int x = 100;
int result = 1;
for (int i = 1; i < (x + 1); i++) {
    result = (result * i);
}
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)

这显然是因为结果对于整数来说太大了,但我习惯于为溢出得到大的负数,而不是0.

提前致谢!


当我切换到这个:

int x = 100;
int result = 1;

for (int i = 1; i < (x + 1); i++) {
    result = (result * i);
    System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)

我得到这个.

java int overflow factorial

15
推荐指数
4
解决办法
2万
查看次数

计算2的幂,每次打印出0

这是我的代码:

int foo() {
  int a = 1;
  while(1) {
    a *=  2;
    printf("a = %d\n", a);
  }
  return a;
}


int main(void) {
  foo();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它只是打印出"a = 0".我糊涂了!我错过了一些非常简单的事吗?

c

0
推荐指数
1
解决办法
36
查看次数

标签 统计

java ×2

c ×1

factorial ×1

int ×1

integer ×1

integer-overflow ×1

overflow ×1