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.

もちろん、C や Java の能力を意味しない10^kため、他の方法を使用して計算する必要があります。^

最初の 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 に答える