ERROR en programa para factorizar desde un numero

Iniciado por Puntoinfinito, 17 Octubre 2012, 00:08 AM

0 Miembros y 1 Visitante están viendo este tema.

Puntoinfinito

Buenas elhackeros.

Tengo que hacer un programa que la entrada sea un numero cualquiera que sera guardado en una variable, luego ha de guardar en variables diferentes la factorizacion en descenso de ese numero. (Por ejemplo. Entrada: 4, las variables seran; 4,3,2,1)

Entonces cada numero de factorizacion se le ha de asignar una variable, y luego en la salida mostrar todas las variables guardadas de dicho numero.

No se si estara muy claro, lo dudo... Por eso os dejare un ejemplo.

Entrada:5
Salida*:5 4 3 2 1

*El metodo de salida ha de ser cout << variable[];


Os dejo el código en c++ que yo he echo. Algo mal hay...

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>

using namespace std;

int main()
{
int a = 0;
char i[100];
cin >> a;
if (a != 0) {
for (int b = 0;a > b;a--) {
i[a] = a;
cout << i[a] << " ";
}
}
return 0;
}
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

Blaster

#1
Creo que utilizas el tipo de dato inapropiado para este caso:
Código (cpp) [Seleccionar]
char i[100];

Los diferentes tipos de datos tienen cierta capacidad, es decir, el char equivale a un byte, por lo que solo puedes guardar valores de 0 a 255 (sin signo, con signo es de -127 a 128) mientras un int es de 2 bytes y tiene mas capacidad y si quieres guardar un numero mayor a 255 en un char te dara resultados no deseados.
Te dejo el code nose si es lo que buscas:

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
int a = 0;
int j[100];

cout << "Ingrese un numero: ";
cin >> a;

for(int i = 0; a > i; a--){
       j[a]= a;
  cout << j[a] << " ";
  }
cin.get();cin.get();
return 0;
}


Un saludo  ;)

Puntoinfinito

Eso es lo que queria, gracias :)

Pero si char puede contener hasta 255 sin signo, porque no deja ejecutar este, tiene tan solo 100.

Saludos y gracias :)
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

0xDani

El tamaño del tipo int es variable dependiendo de la plataforma en la que estes, pero en la mayoria es de 4 bytes, 2 bytes suele ser un short. De todas formas podeis averiguar el tamaño de los tipos en vuestros ordenadores usando el operador sizeof().

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Puntoinfinito

Ya me quedo todo claro, para arrays de valor numeral mejor utilizar int[]
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

Puntoinfinito

Aprovecho este hilo para preguntaros otra cosa.

Desde este código, ahora es posible que diga la multiplicación de todos los números imprimidos?

Por ejemplo si escribes 5 la salida será : 5*4*3*2*1 = 120
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

x64core

Cita de: Puntoinfinito en 18 Octubre 2012, 23:15 PM
Aprovecho este hilo para preguntaros otra cosa.

Desde este código, ahora es posible que diga la multiplicación de todos los números imprimidos?

Por ejemplo si escribes 5 la salida será : 5*4*3*2*1 = 120

cuando decis "la salida sera: ..." te referis a que lo muestre en una cadena no?
bueno muy facil, primero calcularia la factorizacion del numero, luego como podreis fijarte el codigo de los numeros empieza de 0x30 a 0x39 entonces podeis hacer un incremento a 0x30 a la variable que contiene el numero así se convierte en el codigo
que representa al numero. luego copiarlos en un buffer, yo haria un pequeño parser por cierto. muy facil.





$Edu$

Pregunto solamente.. porque usas un array? todavia de 100 sin saber cual numero pondra el usuario?

Haces un bucle, que vaya desde la variable (numero que ingreso) hasta 1. Vas imprimiendo cada numero seguido de "*" y te queda "5*4*3*2*1" como querias.

Pero ahora con lo nuevo que dijiste, para sacar el factorial de un numero, podes usar la Recursividad, si no sabes que es busca en google que hay info. Fijate que el factorial de 5 (5!) es igual a 5*4!, y a la vez 4! es igual a 4*3! y 3! es igual a 3*2! y 2! es igual a 2*1! que es 2. Que quiero decir con esto? que usando la recursividad, llamando al mismo procedimiento podes hacer algo simple como esto:

Factorizar(n) {
if (n=2) return 2;

return Factorizar(n) * Factorizar(n - 1)

}

Y si lo entiendes y te gusta esa forma, podes agregarle que muestre la variable n antes del ultimo return, asi como explique al principio.