跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 为什么我这么写会报数组越界的错?
未分類
5 12 月 2020

为什么我这么写会报数组越界的错?

为什么我这么写会报数组越界的错?

資深大佬 : gzk329 0

if ((long) i * i < n) {                     for (int j = i * i; j < n; j += i) {                         isPrime[j] = 0;                     }                 } 

上面是官方的

while((long) (i * (i + k)) < n){                         isPrime[i * (i + k)] = 0;                         k++;                     } 

为什么我这么写会报数组越界的错?

大佬有話說 (7)

  • 資深大佬 : zvl0reqglvd

    应该没问题啊

  • 資深大佬 : raaaaaar

    手机上看着要命

  • 資深大佬 : geelaw

    溢出过了再转换,不会撤销溢出。

  • 資深大佬 : 23571113

    你把 j 的值打印出来看看,是不是变成负的了。

  • 主 資深大佬 : gzk329

    n 取 499979
    打印:i * (i + k)
    打印结果:
    …..
    495607
    496308
    497009
    497710
    498411
    499112
    499813
    -2146737495

    确实

  • 資深大佬 : across

    上面说溢出已经指明了吧。

    啥语言?这里 long 应该是 64 位长度的吧,(long) i * i 是 long * int => long,没有溢出。
    (long) (i * (i + k))在(i * (i + k))已经溢出了,转个 long 多余的。

  • 資深大佬 : leavebody

    看成了“为什么我这么会写数组越界的错”

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具