2

我需要打印第一个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

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

4

3 回答 3

7

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

当然,您将需要10^k使用其他方法进行计算,因为^这并不意味着在 C 或 Java 中的强大。

要查找前 k 位,请参阅取幂的前 n 位

于 2012-09-08T08:33:16.740 回答
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;

}

于 2012-09-08T09:17:32.050 回答
1

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

于 2012-09-08T08:34:24.723 回答