[ create a new paste ] login | about

Link: http://codepad.org/KR7xcvHk    [ raw code | fork ]

C++, pasted on Nov 11:
#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;
}


Create a new paste based on this one


Comments: