当前位置: 代码迷 >> 综合 >> int型转换为long型遇到的一个小问题
  详细解决方案

int型转换为long型遇到的一个小问题

热度:53   发布时间:2023-09-19 08:30:39.0

        LeetCode上有一道题:给出一个数 n ,求(0, n)之间素数的个数。然后我采用埃拉托斯特尼筛法在每次找到一个素数时,将能被素数整除的数排除掉。但是,在进行int类型转换的时候会报:java.lang.ArrayIndexOutOfBoundsException

代码如下:

public int countPrimes(int n) {boolean[] notPrimes = new boolean[n + 1];int count = 0;for(int i = 2; i < n; i++){if(notPrimes[i]){continue;}count++;//for(long j = (long) (i * i); j < n; j += i) 会报错for(long j = (long)i * i; j < n; j += i){notPrimes[(int)j] = true;}}return count;}

原因是:java中,int类型为32位,范围 -2^31-1~2^31,当超出这个范围会发生数据溢出,得到错误的数据,然后再转型为long型。所以是先转型再计算。 

  相关解决方案