yul*_*ian 1 c crash modulo undefined-behavior perfect-numbers
我正在编写一个可以找到完美数字的程序。阅读完这些完美数后,我发现了它们的列表:完美数列表。目前的输出是:
28 // perfect
496 // perfect
8128 // perfect
130816 // not perfect
2096128 // not perfect
33550336 // perfect
Run Code Online (Sandbox Code Playgroud)
我决定创建数组并将其与数字一起放置,将数字完全分开(没有其余部分)。因此,我将能够通过添加数组的所有元素来验证它是否是一个完美的数字。但应用程序崩溃了,我不明白为什么:
#include <stdio.h>
#include <stdlib.h>
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;
}
Run Code Online (Sandbox Code Playgroud)
您在这里做模数zero:
if ( 130816 % number == 0 )
Run Code Online (Sandbox Code Playgroud)
这是未定义的行为。如果您开始 for 循环,1它应该可以解决该问题。但是,对于N % 1 == 0所有情况N,您可能需要从 开始2。
根据C99标准,6.5.5 /5( 中未更改C11):
/ 运算符的结果是第一个操作数除以第二个操作数所得的商;% 运算符的结果是余数。在这两个操作中,如果第二个操作数的值为零,则行为未定义。