hdu 1061 Rightmost Digit

解决本题使用数学中的快速幂取余:

该方法总结挺好的:具体参考http://www.cnblogs.com/PegasusWang/archive/2013/03/13/2958150.html

#include<iostream>
#include<cmath>
using namespace std;
int PowerMod(__int64 a,__int64 b,int c)//快速幂取余 
{
    int ans=1;
    a=a%c;
    while(b>0)
    {
        if(b%2==1)//如果为奇数时,要多求一步,可以提前放到ans中 
          ans=(ans*a)%c;
        b=b/2;//不断迭代 
        a=(a*a)%c;//把(a^2)%c看成一个整体 
    }
    return ans;
}
int main()
{
    int n;
    cin>>n;
    __int64 m;
    while(n--)
    {
        cin>>m;
        cout<<PowerMod(m,m,10)<<endl;
    }
    return 0;
}
View Code

还有其他的方法比如数学规律等 但个人觉得这种方法稍难:

#include<stdio.h>
int main()
{
 __int64 n;
 int a[10][4]={{0},{1},{6,2,4,8},{1,3,9,7},{6,4},{5},{6},{1,7,9,3},{6,8,4,2},{1,9}},d,t;//找规律
 scanf("%d",&t);
 while(t--)
 {
  scanf("%I64d",&n);
  d=n%10;
  if(d==0||d==1||d==5||d==6)
   printf("%d
",d);
  else if(d==4||d==9)
   printf("%d
",a[d][n%2]);
  else
   printf("%d
",a[d][n%4]);
 }
 return 0;
}
View Code
原文地址:https://www.cnblogs.com/wft1990/p/5876966.html