#c #loops #perfect-numbers
#c #циклы #совершенные числа
Вопрос:
Я написал простую программу, чтобы найти идеальное число, которое находится сразу после 28 (то есть 496), однако оно не работает. Не уверен, что я делаю неправильно.
#include <stdio.h>
int main(){
int num=29, sum=0, aux=1;
while(aux!=0){
for(int i=1; i<num; i ){
if(!(num%i)){
sum =i;
}
}
if(sum == num){
printf("%d", sum);
aux=0;
}else{
num ;
}
}
return 0;
}
Комментарии:
1. Не использование отладчика было вашей первой ошибкой.
2. Вместо
for(int i=1; i<num; i ){
. код будет выполняться намного быстрее сfor(int i=1; i<=num/i; i ){
.
Ответ №1:
Вы должны инициализировать sum
перед каждой проверкой.
while(aux!=0){
sum = 0; /* add this */
for(int i=1; i<num; i ){
Ответ №2:
Вы должны были инициализировать значение sum внутри цикла while, потому что его значение не сбрасывается на 0 после проверки числа, и оно продолжает увеличивать более позднее значение, так что в конечном итоге это приведет к ошибке.