http://acm.hdu.edu.cn/showproblem.php?pid=1061
这个是大数问题吧,不过数据太大一定有技巧的,n^n(n<=1000000000), 题目要取的是个位数字,所以我们只有把(n%10)^n%10就可以了,因为进位对个位不影响,对于n的次方还是很大,我们就先求n/2,可是还是要考虑到n为奇数的时候 t=t*t*a,(a=n%10);比如当n=5的时候n/2=2,t=(a^2)*(a^2)*(a)=a^5,但a^4即n=4;n/2=2;此时t=(a^2)*(a^2)
代码:
View Code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int exmod(int a,int n,int b)
{
int t;
if(n==1) return a;
t=exmod(a,n/2,b);
if(n%2) t=(t*t*a)%b;
else t*=t;
return t%b;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
printf("%d\n",exmod(n%10,n,10));
}
return 0;
}