我在写一个能找到完美数字的程序。在阅读了这些完美数字之后,我偶然发现了一个清单:完全数列表。目前的产出是:
28 // perfect
496 // perfect
8128 // perfect
130816 // not perfect
2096128 // not perfect
33550336 // perfect我决定创建数组,并将其与数字放在一起,数字将整个数字除以(不包括其余的)。因此,通过添加数组的所有元素,我将能够验证它是否是一个完美的数字。但是应用程序崩溃了,我不明白为什么:
#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;
}发布于 2013-06-06 01:21:57
你在这里做模数zero:
if ( 130816 % number == 0 )这是未定义的行为。如果您在1上启动for循环,它应该会修复这个问题。但是,由于N % 1 == 0适用于所有N,您可能需要从2开始。
根据C99标准,6.5.5 /5 (在C11中不变):
/运算符的结果是第一个操作数除以第二个操作数的商;%运算符的结果是余数。在这两个操作中,如果第二个操作数的值为零,则行为未定义。
发布于 2013-06-06 01:26:55
当number=0时,你被零除;
138816 % number涉及除法和余数。
https://stackoverflow.com/questions/16952292
复制相似问题