jueves, 15 de marzo de 2012

Project Euler 40

#include <iostream>
#include <math.h>
using namespace std;
//metodo para obtener el i-esimo caracter de la concatenacion de 1,2,3,4,5...
int d(int i)
{
    int cd = 0; //cantidad de digitos
    int cda = 0; //cantidad de digitos acumulados
    int scd = 0; //siguiente cantidad de dtitos
    while( cda + scd < i)
    {
        cda += scd;
        cd++;
        scd =  (pow(10,cd)-pow(10,cd-1))*cd;
    }
    int numactual = pow(10,cd-1)-1;//numero actual hasta el cual se sumo
    while(cda < i)
    {
        cda += cd;
        numactual++;
    }
    int csp = (cda-i);
    while(csp--) numactual /= 10;
    return numactual%10;
}
int main()
{
    cout << d(1)*d(10)*d(100)*d(1000)*d(10000)*d(100000)*d(1000000)<<endl;
    return 0;
}

No hay comentarios:

Publicar un comentario