链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=73

 

高精度乘法。一次乘以2~len,再判断是否是原字符串的一个cut-string

  有一个函数叫strstr()..用上能精简很多代码。。

 

#include<stdio.h>
#include<string.h>
char tem[80];

bool hpm(void)
{
	char rostr[200];
	char temp[80];
	strcpy(temp,tem);
	int i;
	int j;
	char t;
	bool ans=true;
	int sign=0;
	int len=strlen(temp);
	for(i=2;i<=len;i++)			//从2乘到len 
	{
		for(j=len-1;j>=0;j--)		//高精度乘法 
		{
			t=tem[j];
			temp[j]=( (tem[j]-'0')*i+sign)%10+'0';
			sign=((t-'0')*i+sign)/10;
		
		}
	strcpy(rostr,temp);
	strcpy(rostr+len,temp);
	if(strstr(rostr,tem)==NULL)
		ans=false;
	}
	return ans;
	
}

int main()
{
	
	while(scanf("%s",tem)!=EOF)
	{	
		if(hpm())
			printf("%s is cyclic\n",tem);
		else
			printf("%s is not cyclic\n",tem);
		
	}
	return 0;
}