计算n ^ n中的第一个和最后一个k位

时间:2012-09-08 08:28:33

标签: java c algorithm math

我需要打印

中的第一个k数字和最后k个数字

n^n (n to the power of n, where n is an integer) 例如:


Input       Output

n k         First k digits       Last k digits

4 2    -->  25                   56
9 3    -->  387                  489

我觉得它需要一些聪明的数学,但我无法想到任何东西。请提出解决问题的方法。

3 个答案:

答案 0 :(得分:7)

最后的k个数字很简单,你只需要计算它modulo 10^k。为此,在每次乘法后,只应用模数,即。 intermediate_result %= 10^k

当然,您需要使用其他方法计算10^k,因为^并不代表C或Java的强大功能。

要查找前k个数字,请参阅first n digits of an exponentiation

答案 1 :(得分:2)

感谢大家的帮助。我的最终代码是


#include <stdio.h>
#include <math.h>

long int lastKdigits(long long n,int k)
{
long long i,res=1,div=pow(10,k);

for(i=1;i<=n;i++)
{
    res=(res*n)%div;
}

return res;
}

long int firstKdigits(long long n,int k)
{
   long double x, y;

   x = n*log10(n);
   y = floor(pow(10,x-floor(x) +k-1));
   return ((int)y);
}

int main()
{

long long n;
int k;

scanf("%lld %d",&n,&k);

printf("%ld\t",firstKdigits(n,k));
printf("%ld\n",lastKdigits(n,k));
}

return 0;

}

答案 2 :(得分:1)

对于最后k位数,您只需要计算n^n (mod 10^k)就可以了,但我不知道其他k数据的任何解决方案!