hdu 1061 Rightmost Digit

Posted 泡面小王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1061 Rightmost Digit(找规律)

hdu 1061 Rightmost Digit

HDU 1061 [Rightmost Digit] 数学方法

hdu-1061 Rightmost Digit

HDU-1061-Rightmost Digit

hdu1061Rightmost Digit(快速幂取余)