我需要打印
中的第一个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
我觉得它需要一些聪明的数学,但我无法想到任何东西。请提出解决问题的方法。
答案 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数据的任何解决方案!