poj1047 2010.2.17
分析:
有两件事要做
1. 高精度,单*多
2. 判断是不是循环的
一次ac鸟
#include <stdio.h>
#include <string.h>
#define MAXN 200+10
int num[MAXN],n,head,tail,add[MAXN];
char chnum[MAXN];
void change();
int doit();
int okok();
int okok()
{
int i,j,flag;
for(i=1;i<=n+n;i++)
{
flag=0;
for(j=1;j<=n;j++)
if (num[i+j-1]!=add[j])
{
flag=1;
break;
}
if (!flag) return 1;
}
return 0;
}
int doit()
{
int mid[MAXN];
int i,j;
memcpy(mid,num,sizeof(num));
for(i=n+1;i<=n+n;i++)
num[i]=num[i-n];
// for(i=1;i<=n+n;i++)
// printf("%d",num[i]);
// printf("\n");
for(i=2;i<=n;i++)
{
memset(add,0,sizeof(add));
for(j=1;j<=n;j++)
{
add[j]+=mid[j]*i;
add[j+1]=add[j]/10;
add[j]%=10;
}
if (add[n+1]) return 0;
// for(int k=1;k<=n;k++)
// printf("%d",add[k]);
// printf(" %d\n",add[n+1]);
if (!okok()) return 0;
}
return 1;
}
void change()
{
memset(num,0,sizeof(num));
int i;
for(i=1;i<=n;i++)
num[n+1-i]=chnum[i-1]-48;
// for(i=1;i<=n;i++)
// printf("%d %d\n",i,num[i]);
}
void main()
{
while (scanf("%s",chnum)!=EOF)
{
n=strlen(chnum);
change();
if (doit()) printf("%s is cyclic\n",chnum);
else
printf("%s is not cyclic\n",chnum);
}
}