Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  sad
Language: C/C++
Code:
#include <iostream>
#include <time.h>

using namespace std;

struct timespec ts;

int digitos[99];

int j, numero, i;

void calcDigitosFede(int num) {
    int j = 0;
     while (num > 0) {
          digitos[j++] = num%10;
        num = num / 10;
    }
     digitos[j] = -1;
}

int getResultFede() {
     numero = 1;
     i = -1;
    while(digitos[++i] != -1) {
         numero *= digitos[i];
    }
     return numero;

}

long atol(char* a){
    long l = 0;
    int i = -1;
    while(a[++i]){
        l *= 10;
        l += a[i] - '0';
    } 
    return l;   
}


int main(int cant, char** args) {
              
     long desde, hasta, objetivo;
     bool print = false;
     
     try {
          //int in = -1;
          int in = 0; //el compilador web manda un parametro de mas...
          
          while(++in < cant) {
               switch(args[in][1]) {
                    case 'd':
                         desde = atol(args[++in]);
                         break;
                    case 'h':
                         hasta = atol(args[++in]);
                         break;
                    case 'o':
                         objetivo = atol(args[++in]);
                         break;
                    case 'v':
                         print = true;
                         break;
                    default:
                         cout << "Los parametros enviados no son válidos.";
                         return -1;
               }
          }
          
          
          timespec_get(&ts, TIME_UTC);
          long time1 = ts.tv_nsec;
          
          int resultado[hasta-desde];
          int cantRes = -1;
        int numero;
        for(int i = desde; i<=hasta; i++) {
             numero = i;
             while(numero >= 10) {
                  calcDigitosFede(numero);
                  numero = getResultFede();
             }
             if(numero == objetivo) {
                  resultado[++cantRes] = numero;
             }
        }
        cantRes++;
          timespec_get(&ts, TIME_UTC);
          long time2 = ts.tv_nsec;
          
          long result1 = time2-time1;
          
          if(print) 
               cout << "Numeros que cumplen que su multiplicación recursiva de el número objetivo (" << objetivo << "):";
               while(--cantRes)
                cout << resultado[cantRes];
            //resultado.forEach(item->{
               //     System.out.println(item);
               //});
          
          if(cantRes + 1)
              cout << "Se encontraron " << cantRes << " que coinciden con el objetivo.\nTardo: " << result1 << "ns";
          else
              cout << "No se encontraron numeros que coincidan con el objetivo";
          
     } catch (...) {
          cout << "Para la ejecución se requieren los siguientes parámetros: \n/d:x valor desde (inclusive)\n/h:x valor hasta (inclusive)\n/o:x valor objetivo de la formula\n/v listar los números que cumplen el objetivo\nEjemplos de llamada: \njava -jar desafio.jar /d 5139 /h 8000 /o 5 \njava -jar desafio.jar /d 5139 /h 8000 /o 5 /v";
     }
     
}
Comments: