问题
I'm writing a program that finds perfect numbers. Having read about these perfect numbers I came across a list of them: List of perfect numbers. At the moment the output is:
28 // perfect
496 // perfect
8128 // perfect
130816 // not perfect
2096128 // not perfect
33550336 // perfect
I decided to create array and put it with numbers, which divide the number wholly (without the rest). So I will be able to verify if it is a perfect number or not by adding all elements of the array. But app crashes and I cannot understand why:
#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;
}
回答1:
You are doing modulus zero
here:
if ( 130816 % number == 0 )
which is undefined behavior. If you start your for loop at 1
instead it should fix that issue. However, since N % 1 == 0
for all N
, you probably need to start at 2
.
From the C99 standard, 6.5.5 /5
(unchanged in C11
):
The result of the / operator is the quotient from the division of the first operand by the second; the result of the % operator is the remainder. In both operations, if the value of the second operand is zero, the behavior is undefined.
回答2:
You are dividing by zero when number=0;
138816 % number
involves division and a remainder.
来源:https://stackoverflow.com/questions/16952292/program-crashes-when-if-variable-2-0