首页 > 代码库 > 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;}
还有其他的方法比如数学规律等 但个人觉得这种方法稍难:
#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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。