// HDOJ 1097 A hard puzzle // @author: bos // @date: 2012.2.17 //类似1061的题目 //好像用到了拉格朗日的不知道什么定理 //在《算法导论》里有,有机会借一本来看 #include <stdio.h> #include <math.h> int main() { _int64 a, b; while (scanf("%I64d%I64d", &a, &b)!= EOF) { int use[10]= {0}; int result[10]= {0}; //存储循环数 int dig= 1; //存储末尾数 long i, j= 0; dig= a% 10; for (i= 0; i< b; i++) { if(use[dig]== 1) break; else { result[j]= dig; j++; use[dig]= 1; dig*= (a% 10); dig%= 10; } } if((a== 1)||(b== 1)||(a== 0)) printf("%d\n", a% 10);//貌似必须有a、b为0的情况 else if(b== 0) printf("1\n"); else printf("%ld\n",result[(b- 1)% j]); } return 0; }