#include<stdio.h>
int fun(a){
int c, n;
c = a%10;
switch(c)
{
case 0:
case 1:
case 5:
case 6:
case 9:
n = c;
break;
case 3:
if(a%4 == 1) n = 3;
else n = 7;
break;
case 4:
n = 6;
break;
case 7:
if(a%4 == 1) n = 7;
else n = 3;
break;
case 2:
case 8:
if(a%4 == 0) n = 6;
else n = 4;
break;
default: break;
}
return n;
}
int main()
{
int T, a, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &a);
printf("%d\n",fun(a));
}
return 0;
}
这一题输入一个N,计算N^N,然后输出N^N这个数最右边的那个数字。题目很容易懂,用最基本的方法写会超时,后面找一下规律,发现N^N,对每个N而言,末位最多只有2种可能。把可能的结果列出来,然后做一个简单的分析,就可以了。
上面这个代码是AC过了的,下面贴出一段没有AC过,但是我个人觉得可以解决这一题的代码。和上面的代码不同的是,下面的代码对判别条件进行了扩展,但是不影响输出结果。不过也有可能是错误的,希望大牛们指正。
#include<stdio.h>
int main()
{
int T, a, n, i;
scanf("%d", &T);
while(T--)
{
scanf("%d", &a);
if((a%10) == 0) n = 0; //末尾为0的数
else
{
n = 1;
if(!(a%4)) //以4为周期循环
i=4 ;
else
i = a%4;
while(i--)
n *= a;
}
printf("%d\n", n%10);
}
return 0;
}