给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字。
Input
一个数N(1 <= N <= 10^9)
Output
输出N^N的末位数字
Input示例
13
Output示例
3
分析:因为是求末尾数字,只需要考虑n的个位数字的n次方即可,不难发现,0~9的n次方末尾数字总是循环出现,,使用数组存下这个循环即可很快求出所要的末尾数字
#include<iostream>
using namespace std;
int main()
{
int n,a[100]; //数组记录末位数字循环
cin>>n;
int end=n%10; //记录n的个位数字
a[0]=end;
int i=1;
for(i;;i++)
{
a[i]=(end*a[i-1])%10;
if(a[i]==a[0])
break;
}
if(n%i)
i=n%i;
cout<<a[i-1]<<endl;
}
优化方法,使用快速幂,复杂度大大下降
#include<iostream>
using namespace std;
int poww(int a)
{
int ans=1,base=a,b=a;
while(b)
{
if(b&1) //判断是否是奇数
{
ans=(ans%10)*(base%10);
if(ans<0)ans+=10;
}
base=(base%10)*(base%10);
if(base<0)base+=10;
b>>=1;
}
return ans%10;
}
int main()
{
int a,b;
cin>>a;
cout<<poww(a)<<endl;
}