求一个大数N^N的值的最右边的数字,即最低位数字。
简单二分法求解就可以了。
不过注意会溢出,只要把N % 10之后,就不会溢出了,不用使用long long。
#include <stdio.h>
int rightMost(int n, int N)
{
if (n == 0) return 1;
int t = rightMost(n / 2, N);
t = t * t % 10;;
if (n % 2) t *= N;
return t % 10;
}
int main()
{
int T, n;
scanf("%d", &T);
while (T--)
{
scanf("%d", &n);
printf("%d\n", rightMost(n, n%10));
}
return 0;
}