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

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

大家好,又见面了,我是你们的朋友全栈君。

        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型。所以是先转型再计算。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135675.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • console.log()的作用与实现[通俗易懂]

    console.log()的作用与实现[通俗易懂]console.log()的作用是什么主要是方便你调式javascript用的。你可以看到你在页面中输出的内容。相比alert他的优点是:1,他能看到结构话的东西,如果是alert,淡出一个对象就是[objectobject],但是console能看到对象的内容。,2,console不会打断你页面的操作,如果用alert弹出来内容,那么页面就死了,但是console输出内容后你页面还可以正常操作。3,console里面的内容非常丰富,你可以在控制台输入:console,然后就可看到:Cons

    2022年7月14日
    14
  • delphi FormatDateTime

    FormatDateTimeFunctionRichformattingofaTDateTimevariableintoastringSysUtilsunit1 function FormatDateTime(constFormatting:string;DateTime:TDateTime):stri

    2022年4月6日
    71
  • PSCU选择Qlik支持其完善的服务交付战略「建议收藏」

    PSCU选择Qlik支持其完善的服务交付战略

    2022年4月2日
    77
  • c++ 11 list转set「建议收藏」

    c++ 11 list转set「建议收藏」list<int> li; for(inti=0;i<100;i++){ li.push_back(i); } for(inti=0;i<100;i++){ li.push_back(i); } unordered_set<int> uset(li.begin(),li.end());//用list去初始化s…

    2022年6月21日
    44
  • Mock测试用例_测试用例库

    Mock测试用例_测试用例库近期在重构一些旧项目,看到之前同事编写的测试用例是使用注入SpringJUnit4ClassRunner直接注册实现层然后测试需要操作的方法是否可运行。虽然这样说是可以达到测试的想法。但是如果要使用

    2022年8月1日
    13
  • shell 或运算_shell 变量运算

    shell 或运算_shell 变量运算shell中多重条件与或运算if[-e/dev/mmcblk0p1]&amp;&amp;[-e/dev/mmcblk0p2]&amp;&amp;[-e/dev/mmcblk0p3];then echo-e"—-&gt;partitionisexisting!" exit0fi参考:Shell脚本IF条件判断和判断条件总结…

    2022年10月9日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号