he escrito un código C++ para generar los primeros y últimos dígitos k de un número tan grande como 10^9. (k < = 9).primeros y últimos k dígitos del número n^n
cin>>n>>k;
cout << (unsigned long)floor(pow(10.0, modf(n*log10((double)n), &dummy) + k - 1)) << " "; // code that prints the first k digits
long long int ans = foo(n,k); // function that prints the last k digits
if(ans==0)
{
for(int i=0;i<k;i++) cout << "0";
}
else{
stringstream ss;
string s;
ss<<ans;
ss>>s;
if(s.size()!=k)
{
for(int i=0;i<(k-s.size());i++)
s="0"+s;
}
cout<<s;
}
donde la función foo() es:
long long int foo(int n, int k) // code of the function
{
long long int m=1;
for(; k > 0; k--) m*=10;
long long int r=1, t=n % m;
while(n)
{
if (n % 2)
r = r * t % m;
t = t * t % m;
n >>= 1;
}
return r;
}
esto me da salida como: si se les da 9 y 3 como entradas, que da primero y 3 últimos dígitos del 9 al poder 9 (9^9) es decir, 387 y 489. Pero aún me faltan algunos casos de prueba. ¿Alguien puede ayudarme a encontrar el caso de prueba para el cual mi código no funcionaría?
1 ≤ n ≤ 109, 1 ≤ k ≤ 9 el enunciado del problema: http://www.codechef.com/problems/MARCHA4/
si sabe que hay un caso en el que el código no funciona, ¿por qué no describe ese caso? suena como tarea donde tu tarea es resolverlo. entonces no está bien atendido si alguien en Stack Overflow lo resuelve: estropearía por completo su aprendizaje –
A partir de la descripción del problema, se parece mucho a que se supone que debe encontrar un método que funcione para MUY grande ' n', por ejemplo "encuentre los primeros y últimos 4 dígitos de 2413 elevado a 2413". –
en mi humilde opinión, Anotar su código con comentarios le ayudará a obtener una respuesta más rápida. –