这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。
现开始没有思路,看了网上分析后,豁然开朗,一次AC。
和HDOJ 1060看起来挺像,不过思路不一样。(指我的思路不一样,不知道这2题能否用相同思想做。)
题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=1061
思路:
思路:末尾数乘以末尾数还是末尾数 且末尾数的变化是有规律的(规律一定小于10)
代码:
// HDOJ 1061
// Author: Tanky Woo
/*
思路:末尾数乘以末尾数还是末尾数
且末尾数的变化是有规律的(规律一定小于10)
*/
#include
#include
using namespace std;
long long N;
int main()
{
char a[10]; //保存转换成字符后的N
int model[20];
int nCases;
scanf("%d", &nCases;);
while(nCases--)
{
scanf("%ld", &N;);
sprintf(a, "%d", N);
int len = strlen(a);
int t = a[len-1] - '0'; //记录N的最后一位
int i = 0;
int temp = t * t % 10;
model[0] = t;
model[++i] = temp;
while(1)
{
temp*=t;
temp %= 10;
if(temp == t)
break;
model[++i] = temp;
}
++i;
int k = ((N % i -1)+i) % i; // 最后的再+i并对i求与是为了防止N%i=0的情况,比如N=4
printf("%d\n", model[k]);
}
return 0;
}