Ver Mensaje Individual
  #11 (permalink)  
Antiguo 06/09/2009, 10:17
JuanLVBR
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Numero perfecto en C

Buenas, he llegado al foro de rebote buscando otra cosa, y como siempre, uno tiene la mala costumbre de leerse lo que no busca por curiosidad y rebotar de sitio en sitio... Hasta llegar a remotos lugares xD.

No sabía lo que son los números perfectos, pero se me ocurren varias modificaciones en el código de Slackin (que personalmente me gusta más que el de jarr18 por no usar pow, es una función bastante pesada).

La primera es simple, la eliminación de una variable, "mul" y con ella la instrucción "mul=num%i;"

Código:
#include<stdio.h>

int main() {
	int i, num, sum=0;
	
	printf("Introduzca el numero que desea verificar si es perfecto: ");
	scanf("%d", &num);
      	
	for(i=1; i<num; i++) {
		if(num%i==0) {
			sum+=i;
		}
	}
        /*sum se compara sum con num, y no con mul */
	if(sum==num){
		printf("El numero %d es perfecto.\n", num);
	}
	else
	printf("El numero %d NO es perfecto.\n", num);
	return 0;
}
Después podríamos parar el bucle en la mitad, o bien parando en num/2+1 (operación no muy costosa), o bien declarando una variable de tipo int "parada" que sea num/2+1 para no realizar la división en cada iteración, puesto que sabemos que el mayor divisor de num va a ser su mitad.

Código:
#include<stdio.h>

int main() {
	int i, num, sum=0, parada;
	
	printf("Introduzca el numero que desea verificar si es perfecto: ");
	scanf("%d", &num);
      	
	for(i=1, parada=num/2+1; i<parada; i++) {
	/* O bien for(i=1; i<num/2+1; i++){ y no declarar "parada".*/
		if(num%i==0) {
			sum+=i;
		}
	}
        /*sum se compara sum con num, y no con mul */
	if(sum==num){
		printf("El numero %d es perfecto.\n", num);
	}
	else
	printf("El numero %d NO es perfecto.\n", num);
	return 0;
}
En el return y demás no me meto, eso ya cuestión de gustos.

Última edición por JuanLVBR; 06/09/2009 a las 10:22 Razón: Desconocimiento a la hora de teclear código tabulado.