大家看到题目当中的N(1<=N<=1,000,000,000)是不是有种瞬间被吓到的感觉?更何况是n的n次方;
这时候请大家想想十亿如果用普通的办法去做会不会超时,毫无疑问这是超时的,更何况n的n次方这个数据就直接爆了;
所以我们应该想到解这种题目有的时候是有规律的;
//0(个位为0)---0 1--1 4---6 5---5 6----6 //2---4 6//3----3 7 //7----7 3//8----4 6//9----9
大家看上面那一行数字,这就是这道题目的精华;
题目的要求是n的n次的个位,所以我们可以直接把个位取出来即n%10;
然后我们想个位的n次方是不是也会爆掉呢?(会)
所以我们可以想到做这题是有规律的;
我们先可以写出前几项找出个位在求值;
经过寻找我们得出了以上规律每一个数经过n次方的计算后他的个位会出现以上几种情况;
做这题要知道如果n是偶数那么他的个位绝对不会出现奇数次方,如果n是奇数则绝对不会出现偶数次方;
#include <iostream>
using namespace std;
int main()
{
int n;
int y;
cin>>y;
int a;
while(y--)
{
cin>>n;
a=n%10;
if(a==0||a==1||a==5||a==9||a==6)
cout<<a<<endl;
if(a==4)
cout<<6<<endl;
if(a==2)
{
if(n%4==0)
cout<<6<<endl;
else
cout<<4<<endl;
}
if(a==3)
{
if(n%4==1)
cout<<3<<endl;
else
cout<<7<<endl;
}
if(a==7)
{
if(n%4==1)
cout<<7<<endl;
else
cout<<3<<endl;
}
if(a==8)
{
if(n%4==0)
cout<<6<<endl;
else
cout<<4<<endl;
}
}
return 0;
}