输入更高的值时的细分代码

时间:2018-10-20 11:40:24

标签: c++

因此,我创建了一个c ++代码,该代码在给定范围内对“特殊”数字进行计数,该数字被定义为二进制表示的1位位数的总和小于等于3的数字(即1 (1),2(10),3(11),4(100),5(101),6(110),7(111),8(1000)。

我成功创建了代码,但是有一个问题。在高数字范围内,它会输出分段错误。

关于为什么会发生这种情况的任何想法?

clabel

1 个答案:

答案 0 :(得分:0)

发生分段错误是因为您尝试声明一个太大且扩展到当前内存段之外的数组。

坦率地说,您不需要此数组,只需计算给定范围内的特殊数字即可:

boolean isSpecial(long num) {
   int bits = 0;
   while (num > 0) {
       if (num % 2 > 0) {
           ++bits;
           if (bits >= 3) {
               return true;
           }
       }
       num /= 2;
   }
   return false;
}

long special(long x, long y) {
    long output = 0;
    for(long i = x; i <= y; ++i) {
        if (isSpecial(i)) {
            ++output;
        }
    }
    return output;
}