您的位置:首页 > 其它

poj1047 2010.2.17

2016-02-05 14:19 309 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: