[英]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.