2016-12-14 4 views
-2
доцент

моя программа, чтобы проверить, является ли число совершенное число У меня есть время выполнения EROR пожалуйста, помогите и я использую Notepad ++, если это имеет значениеc.programing, код работы

#include <stdio.h> 

int main(void) 
{ 
    int input=0; 
    int i=0; 
    int counter=0; 

    printf("enter a number \n"); 
    scanf("%d", &input); 
    for (i=0;i<=input;i++) 
    { 
     if (input%i==0) 
     { 
      counter = counter+i; 
     } 
    } 
    if (input==counter) 
    { 
     printf("%d in a perfect number\n", counter); 
    } 
    else 
    { 
     printf("%d is not a perfect number\n", input); 
    } 
    system("pause"); 
    return 0; 
} 
+3

Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать минимальный, полный и проверенный пример. – Olaf

+2

'for (i = 0; i <=input' -->' for (i = 1; i BLUEPIXY

ответ

5

input % i возвращает остаток при делении input на i. Но вы не можете разделить число на 0, так что input % 0 приводит к неопределенному поведению.

Измените свою схему, чтобы начать с 1, а не 0. Кроме того, вы должны остановить доi достигает number, так как число всегда является делителем самого себя, но это не должно включаться в сумму при суммировании делителей (как может число быть равно сумме самого себя и все дивизоры?).

for (i = 1; i < number; i++) 
1

у вас есть input%i == 0 и i инициализируется в 0. Это по существу деление на 0 на первой итерации, которая, вероятно, является причиной ошибки.