解题思路:快速幂运算问题,即把指数都拆成平方的形式,减少运算量。即3^3=3*3^2,4^4=(4^2)^2,5^5=5*(5^2)^2...
题目要求的是最右的一位数(即个位),所以只需将结果对十取余即可
。
(
方法一)
当然,这道题有特殊规律:
当n =1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 ...
a = 1 4 7 6 5 6 3 6 9 0 1 6 3 6 5 6 7 4 9 0 1 4 7 6 5 6 3 6 9 0 ...
所以是以20为一个周期,直接定义一个数组,把所有情况列出即可! (方法二)
a = 1 4 7 6 5 6 3 6 9 0 1 6 3 6 5 6 7 4 9 0 1 4 7 6 5 6 3 6 9 0 ...
所以是以20为一个周期,直接定义一个数组,把所有情况列出即可! (方法二)
方法一:
#include<stdio.h>
__int64 quickpow(__int64 n){
__int64 ans=1,base=n;
while(n){
if(n&1){//如果n是奇数
ans=(base*ans)%10;//分离出一个底数
}
base=(base*base)%10;//逐步求base的平方
n>>=1;
}
return ans;
}
int main(){
__int64 t,n;//用int型精度不准,提交时WA
scanf("%I64d",&t);
while(t--){
scanf("%I64d",&n);
printf("%I64d\n",quickpow(n));
}
return 0;
}
方法二:
#include<stdio.h>
int a[21] = {0,1,4,7,6,5,6,3,6,9,0,1,6,3,6,5,6,7,4,9,0};
int main (){
int t,n;
scanf ("%d",&t) ;
while (t--){
scanf ("%d",&n);
printf("%d\n",a[n%20]);//以二十为一个周期
}
return 0 ;
}