当`if(变量%2 == 0)`时程序崩溃
我正在写一个找到完美数字的程序。 读完这些完美的数字之后,我遇到了一个列表: 完美数字列表 。 目前的输出是:
28 // perfect 496 // perfect 8128 // perfect 130816 // not perfect 2096128 // not perfect 33550336 // perfect
我决定创建数组并使用数字,将数字全部除以(不包括其余数字)。 因此,通过添加数组的所有元素,我将能够validation它是否是一个完美的数字。 但应用程序崩溃,我无法理解为什么:
#include #include int main() { unsigned long number; unsigned long arr2[100] = {0}; int k = 0; for ( number = 0; number <= 130816; number++ ) if ( 130816 % number == 0 ) arr2[k++] = number; for ( k = 0; k < 100; k++ ) printf("%lu", arr2[k]); return 0; }
你在这里做模数zero
:
if ( 130816 % number == 0 )
这是未定义的行为。 如果你在1
开始你的for循环,它应该解决这个问题。 但是,由于所有N
N % 1 == 0
,您可能需要从2
开始。
根据C99
标准, 6.5.5 /5
( C11
不变):
/运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数。 在这两个操作中,如果第二个操作数的值为零,则行为未定义。
当number = 0时,你除以零;
138816 % number
涉及分割和余数。