我需要打印的第一k
數字和最後k
位數計算第一和最後的K位數n的n次方
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
我覺得它需要一些聰明的數學,但是我無法想到任何事情。請提出解決問題的方法。
我需要打印的第一k
數字和最後k
位數計算第一和最後的K位數n的n次方
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
我覺得它需要一些聰明的數學,但是我無法想到任何事情。請提出解決問題的方法。
最後k個數字很容易,你只需要計算它modulo 10^k
。要做到這一點,在每次乘法之後,應用模數,即。 intermediate_result %= 10^k
。
當然,您需要使用其他方法計算10^k
,因爲^
並不意味着在C或Java中的強大功能。
要查找前k個數字,請參見first n digits of an exponentiation。
去年k
數字這是很容易,你只需要計算n^n (mod 10^k)
,但我不知道另一個基爾希納diggits任何解決方案!
感謝大家的幫助。我最後的代碼是
#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;
}
這是你的功課。你應該考慮自己做這個工作。 – tamasgal
另外我會首先質疑約束條件。是否足夠大,不能直接計算,你必須找到另一種聰明的方式? – fayyazkl
其實這不是功課。我只是試圖解決一些問題的樂趣。但我陷入了困境。這就是爲什麼我問,而這也是如何處理它。 – OneMoreError