Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/01/2014, 15:33
Avatar de Payaso73
Payaso73
 
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años
Puntos: 20
Respuesta: Factorización ¿Alguien le echa un vistazo al programa?

Hola picman, hice algunas modificaciones a tu código y funciona con los valores que probé, igualmente probalo vos porque lo hice rápido y puede tener alguna falla y seguramente se puede optimizar, pero esto te lo dejo a vos.

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.     int num, divisor=2,expo=1, base=0;
  5.    
  6.    
  7.     printf("Introduce un numero:\n");
  8.     scanf("%d", &num);
  9.    
  10.     while(num>1){
  11.     /*Divide e incrementa el expo mientras la base sea la misma*/
  12.         if(num%divisor==0){
  13.             num=num/divisor;
  14.             base=divisor;
  15.             expo++;
  16.         }
  17.         else{
  18.     /*Este if es para numeros primos, entra con base==0 por si se ingresa
  19.     un primo al inicio o con expo==1 cuando se cambia de base. Ej: 5 o 10*/    
  20.             if(base==0 || expo==1){
  21.                 divisor++;
  22.             }
  23.     /*Si cambia la base se muestra primero la base y el expo anterior y se
  24.     pasa a la proxima base incrementanto del divisor y volviendo a 1 el expo.
  25.     Ej: num 6 -- 2*1 y 3*1*/
  26.             else{
  27.             printf("%d*%d", base, (expo-1));
  28.             divisor++;
  29.             expo=1;
  30.             printf("\n");
  31.             }
  32.         }
  33.     /*Si se llega al 1 se imprime el valor anterior y se hace num=0 para salir
  34.     del while*/
  35.         if(num==1) {
  36.             printf("%d*%d", base, (expo-1));
  37.             num=0;
  38.         }
  39.     }
  40.    
  41.     return 0;
  42. }

Espero se entiendan los comentarios, si no, preguntame.
Saludos.

P/D: como podes ver, en mi código no es necesario poner num=0 ya que si num=1 sale igual porque el while es num>1, asi que esa linea está de más, por esto te decia que se puede optimizar.

Última edición por Payaso73; 24/01/2014 a las 15:40 Razón: Agrego P/D