Como es un algoritmo matemático relativamente sencillo, el programa es "traducir" directamente la expresion
Definamos el número perfecto como todo numero tal que es igual a la suma de sus divisores positivos.
Vayamos desgranando:
Lo único que hay que comprobar es que el número sea positivo, y luego, que sea la suma de sus divosres positivos:
-> Que sea positivo:
if(num > 0){
}
-> Que sea la suma de sus divisores: Esto es el sumatorio desde num-1 hasta 1, tal que num%i==0
int sumatorio = 0;
for( int i = num-1;num >= 1;i--){ /* Sumatorio desde num-1 hasta 1*/
if(num%i){
sumatorio += i;
}
}
La funcion devolvera el valor 1 si el numero es perfecto, y 0 si no lo es:
if(sumatorio==num){
return 1;
}else{
return 0;
}
Y ahora jutamos todo:
#include <stdio.h>
int checkPerfect(int num);
int main(){
int num;
int isPerfecto;
printf("Introduzca un numero:\n"); isPerfecto = checkPerfect(num);
if(isPerfecto==1){
printf("El número es perfecto"); }else{
printf("El numero no es perfecto"); }
return 0;
}
int checkPerfect(int num){
if(num > 0){
int sumatorio = 0;
for( int i = num-1;num >= 1;i--){ /* Sumatorio desde num-1 hasta 1*/
if(num%i==0){ /* Si es divisor, sumamos al total*/
sumatorio += i;
}
}
}else{
return 0;
}
if(sumatorio==num){ /* Si el total del sumatorio es igual al número, el número es perfecto*/
return 1;
}else{
return 0;
}
}
( El código puede contenter errores, está a bloc de notas y no tengo un compilador de C ahora mismo)