HDOJ 1097 A hard puzzle

// 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;
}
原文地址:https://www.cnblogs.com/ibosong/p/2355174.html