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

Java 计算n^n中的第一个和最后一个k位,java,c,algorithm,math,Java,C,Algorithm,Math,我需要打印中的第一个k数字和最后一个k数字 n^n(n为n的幂,其中n为整数) 例如: 我觉得这需要一些聪明的数学,但我想不出任何这样的东西。请建议解决此问题的方法。最后的k位很简单,您只需计算它的模10^k。为此,每次乘法后,只需应用模,即中间结果%=10^k 当然,您需要使用其他方法计算10^k,因为^并不意味着C或Java中的强大功能 要查找前k个数字,请参见。对于最后的k数字,您只需计算n^n(mod 10^k)就很容易了,但我不知道其他k个数字的任何解决方案 谢谢大家的帮助。我的

我需要打印中的第一个
k
数字和最后一个
k
数字


n^n(n为n的幂,其中n为整数)
例如:




我觉得这需要一些聪明的数学,但我想不出任何这样的东西。请建议解决此问题的方法。

最后的k位很简单,您只需计算它的模10^k。为此,每次乘法后,只需应用模,即中间结果%=10^k

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


要查找前k个数字,请参见。

对于最后的
k
数字,您只需计算
n^n(mod 10^k)
就很容易了,但我不知道其他k个数字的任何解决方案

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


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

对于(I=1;这是你的家庭作业。你应该先考虑做这项工作。我也会先质疑约束。N ^ N大到不能直接计算你必须找到另一个聪明的方法吗?实际上,这不是家庭作业。我只是想解决一些问题来娱乐。但是我陷入了其中。这就是为什么我问,而且太鞠。你用“家庭作业”标记了你的问题,但是很好的尝试;-)只有当你要求n^n的中间k位,足够大的n时,这才是有趣的。
Input       Output

n k         First k digits       Last k digits

4 2    -->  25                   56
9 3    -->  387                  489
#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;