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; }
还有其他的方法比如数学规律等 但个人觉得这种方法稍难:
#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; }
以上是关于hdu 1061 Rightmost Digit的主要内容,如果未能解决你的问题,请参考以下文章