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;
}