[英]Program crashes when `if (variable % 2 == 0)`
我正在写一个寻找完美数字的程序。 阅读完这些理想数字后,我发现了其中的一个列表: 理想数字列表 。 目前的输出是:
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;
}
您在这里将模数设为zero
:
if ( 130816 % number == 0 )
这是未定义的行为。 如果您从1
开始for循环,则应该可以解决该问题。 但是,由于所有N
N % 1 == 0
,您可能需要从2
开始。
根据C99
标准6.5.5 /5
(在C11
更改):
/运算符的结果是第一个操作数除以第二个的商。 %运算符的结果是余数。 在这两个操作中,如果第二个操作数的值为零,则行为是不确定的。
当number = 0时,您被零除;
138816 % number
涉及除法和余数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.