http://acm.pku.edu.cn/JudgeOnline/problem?id=1047

Код:
#include <stdio.h>
#include <string.h>
typedef struct num num;
struct num {
	int d[200];
	int len;
};
void addhigh(num &a,num b) {
	int i,jin=0;
	for(i=0;i<a.len||i<b.len||jin>0;i++) {
a.d[i]=a.d[i]+b.d[i]+jin;
jin=a.d[i]/10;
a.d[i]=a.d[i]%10; }
	a.len=i;
	return ;
}
int main() {
	int i,j,k,temp;
	char st[80];
	num a,b;
	while(scanf("%s",st)!=EOF) {
a.len=b.len=strlen(st);
for(i=a.len-1;i>=0;i--) a.d[i]=b.d[i]=st[a.len-i-1]-'0';
for(i=1;i<b.len;i++) {
	addhigh(a,b);
	if(a.len!=b.len) {
printf("%s is not cyclic\n",st);
break; 	}
	else {
for(j=0;j<a.len;j++) {
	for(k=0;k<a.len;k++){
temp=(k+j)%a.len;
if(a.d[temp]!=b.d[k])
	break;
	}
	if(k==a.len) break;
}
if(j==a.len) {
	printf("%s is not cyclic\n",st);
	break; }
	}
}
if(i==b.len) printf("%s is cyclic\n",st);
	}
	return 0;
}