Dev - C++ - ayuda con este programa

 
Vista:
sin imagen de perfil

ayuda con este programa

Publicado por erika (3 intervenciones) el 10/11/2014 02:03:14
nose donde esta el erro, al compilar no me sale nada, solo ingresr el numeor y se cierra.


// ingresar un numeor entero y retornan el resultado la multiplicacion de todos sus digitos
//mayores o iguales al ultimo
#include <stdio.h>
#include <iostream>

int multi (int n);

main()
{
int j;
printf ("ingrese un numero entero :");
scanf("%d",&j);
multi(j);
printf ("\n");
system ("pause");
}

int multi (int n)
{
int w=1,y=1,p=1;
{
if(n==0)
return 0;
else
{
p=n % 10;

if(p>y)
{
w=y*p;
y=p;
};
multi(n%10);
printf ("%d",w);
};

};
};
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con este programa

Publicado por vangodp (287 intervenciones) el 10/11/2014 03:01:14
No entendi muy bien que es lo que hace tu programa pero creo que ya funciona:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// ingresar un numeor entero y retornan el resultado la multiplicacion de todos sus digitos
//mayores o iguales al ultimo
#include <stdio.h>
#include <iostream>
 
int multi ( int n );
 
main() {
    int j;
    printf ( "ingrese un numero entero :" );
    scanf ( "%d", &j );
    multi ( j );
    printf ( "\n" );
    system ( "pause" );
}
 
int multi ( int n ) {
    int w = 1, y = 1, p = 1;
 
    if ( n == 0 )
        return 0;
    else {
        p = n % 10;
 
        if ( p > y ) {
            w = y * p;
            y = p;
        }
 
        multi ( n % 10 );
 
        printf ( "%d", w );
    }
 
}
Salu
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ayuda con este programa

Publicado por erika (3 intervenciones) el 10/11/2014 03:58:49
gracias por contestar, cuando lo compilo solo me deja ingresar el numero de cuatro digitos pero no hace lo que le pido, necesito que dado un numero positivo de 4 digitos, retornar el resultado la multiplicacion de todos sus digitos mayores o iguales al ultimo digito. ejemplo n=3183, el ultimo digito es el 3, entonces devuelve 3*8*3=72. todo en una recursiva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con este programa

Publicado por vangodp (287 intervenciones) el 10/11/2014 19:42:32
Tiene que ser con funciones recursivas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ayuda con este programa

Publicado por erika (3 intervenciones) el 10/11/2014 20:29:06
Si. O si :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con este programa

Publicado por vangodp (287 intervenciones) el 11/11/2014 16:07:47
puede ser en C++? Como vi que tienes iostream XDD, si ves mejor en c no veo problemas en adaptarlo ;)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
using namespace std;
 
int f ( int n ) {
    static int op = 0; //permite el paso una sola vez en la primera llamada a la funcion
    static int a;  //acumulador... guardara los numeros multiplicados
    static int u;      //almacena el ultimo numero para hacer comparaciones
 
    //solo se entra aqui una vez
    if ( op == 0 ) {
        op++;
        a = 1;
        u = n % 10;
    }
 
    //si n es mayor que 0 seguimos acumulando
    if ( n > 0 ) {
        //...pero solo acumulamos si el ultimo digito de n es mayor que la variable estatica u.
        if ( n % 10 >= u ) {
            a = a * ( n % 10 );
            f ( n = n / 10 ); //enviamos el 318 para seguir calculando
        } else {
 
            cout << "Desechando la ultima posicion de n: " << n % 10 << ". Es menor que static u: " << u << endl;
            n = n / 10;    //Si el ultimo digito de n es manor que la variable estatica u nos deshacemos de el....
            cout << "n ahora contiene " << n << ", y se envia a f() para seguir multiplicando..." << endl;
            f ( n ); //...y repetimos operacion
        }
 
 
    }
 
    cout << "Retornando: " << a << endl;
    return a;
}
 
int main() {
    //funciona con numeros mayores que 4 digitos... lo que quepa en un int vamos XDDD, pero no poner numeros muy grandes o puedes literalmente causar un stackoverflow XD
 
    int n =  23523583;  // <---mude aqui para ver los cambios =)
    cout << f ( n ) << endl;
 
    cin.ignore(); //pausa el programa
    return 0;
}
Si tienes problemas en copiarlo pincha aqui: http://codepad.org/KR7xcvHk

Siento la tardanza... estoy algo liado.

hay incoherencia en los comentarios de la funcion... pero si en main le asignas 3183 a la variable n queda mas facil entender.
3183 es el numero que me has puesto y lo comente basado en el algunas cosas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar