NYOJ 212 K尾相等数

原题链接

这题做得真心纠结,RE两次才ac。思路是每次相乘后都取余,以余数为索引将指数存到数组中,若余数相同的存在,则直接返回当前指数与对应数组元素的和。经典题。

附ac代码:

#include <stdio.h>
#include <string.h>
int sign[1001]; //索引

int f(long long k){
	memset(sign, 0, sizeof(sign));
	long long t;
	int i = 1, j;
	t = k;
	while(k < 1000){
		k *= t;
		++i;
	}	
	sign[k %= 1000] = i++;	
	for(j = 1; j <= 1001; ++j, ++i)
		if(sign[k = (k * t) % 1000]) 
			return i + sign[k];
		else sign[k] = i;
}

int main(){
	int t;
	long long k;
	scanf("%d", &t);
	while(t-- && scanf("%lld", &k))		
		printf("%d\n", f(k));
	return 0;
}


posted on 2014-02-14 22:21  长木Qiu  阅读(113)  评论(0编辑  收藏  举报