hdu 1061 Rightmost Digit

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;

}
posted @ 2011-08-18 09:43  ○o尐懶錨o  阅读(172)  评论(0编辑  收藏  举报