Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Factorización ¿Alguien le echa un vistazo al programa?

Estas en el tema de Factorización ¿Alguien le echa un vistazo al programa? en el foro de C/C++ en Foros del Web. Buenas! Estoy aprendiendo C poco a poco, y tengo que hacer un programa que dado un número, por ejemplo 8 me devuelva su factorización en ...
  #1 (permalink)  
Antiguo 20/01/2014, 08:19
 
Fecha de Ingreso: julio-2013
Mensajes: 11
Antigüedad: 10 años, 9 meses
Puntos: 0
Factorización ¿Alguien le echa un vistazo al programa?

Buenas!

Estoy aprendiendo C poco a poco, y tengo que hacer un programa que dado un número, por ejemplo 8 me devuelva su factorización en potencias, por ejemplo:
2^3

Hasta aquí he podido sacar pero más no he podido:

Código:
#include <stdio.h>

int main() {
	int num, divisor=2,expo=1, base, i=1;

	
	printf("Introduce un numero:\n");
	scanf("%d", &num);
	
	while (num>1){
	if (num%divisor==0) {
		if (i==1) {
			base=divisor;
			num=num/divisor;
			printf("%d*", base);
		}
		else {
			if (num%divisor == 0){  /*  4/2  */
				num=num/divisor;
				expo++;
				}
			else{
			while (num%divisor!=0) {
				divisor++;
			}
				printf("%d", expo);
				expo=1;
			}
			}
		}
	i++;
	}
	return 0;
}

Agradecería cualquier ayuda de verdad.

Muchas gracias y un saludo.
  #2 (permalink)  
Antiguo 24/01/2014, 15:33
Avatar de 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

Etiquetas: int, numero, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:37.