标签:
解决本题使用数学中的快速幂取余:
该方法总结挺好的:具体参考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; }
标签:
原文地址:http://www.cnblogs.com/wft1990/p/5876966.html