C++ 当除数之和不大于数字时,程序将不接受大于10000的限制

C++ 当除数之和不大于数字时,程序将不接受大于10000的限制,c++,C++,当我将限额从100更改为1000000时,它不会打印出所有数字,它会在5位数处停止,并且不会计算更高的数字。为什么会这样 #include <iostream> using namespace std; int main(int argc, char* argv[]) { const int limit = argc > 1 ? atoi(argv[1]) : 100; const int badness = argc > 2 ? atoi(argv[2]) : 1

当我将限额从100更改为1000000时,它不会打印出所有数字,它会在5位数处停止,并且不会计算更高的数字。为什么会这样

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) 
{

const int limit = argc > 1 ? atoi(argv[1]) : 100;
const int badness = argc > 2 ? atoi(argv[2]) : 1;


for (int num = 2; num < limit; num++) {

    int total = 1;

    for (int factor = 2; factor * factor <= num; factor++) {

        if (num % factor == 0) {
            total += factor;


            if (factor * factor != num) {
                total += (num / factor);
            }
        }


        }

        if (abs(num - total) <= abs(badness)) {

            cout << num << " " << flush;
        }
    }
}
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
常数int limit=argc>1?原子(argv[1]):100;
常数int badness=argc>2?原子(argv[2]):1;
for(int num=2;num
这可能是因为您使用的是int


尝试改用long或无符号long

。您可能使用的编译器具有16位
int
类型-通常无法支持
32767
以上的值。如果此类类型溢出(即试图存储大于其所能代表的值),则行为未定义.内置类型,如
int
long
等,都有一个可以支持的有限值范围。对于
int
,该标准不需要-32767到32767之外的值范围(尽管最近有相当多的实现支持更大的范围,但这些范围仍然是有限的)。