首页 > 代码库 > hdu 1061 Rightmost Digit

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\n",d);  else if(d==4||d==9)   printf("%d\n",a[d][n%2]);  else   printf("%d\n",a[d][n%4]); } return 0;}
View Code

 

hdu 1061 Rightmost Digit