题意:给你一个n位整数(可以有前导0),用这个数分别乘以1~n中的每一个数,得到的结果都与原数相同,这里的相同是指得到的结果从某一位开始到结束与原数相等。
下面贴代码,已带有详细的注释。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int ans[1000];
char s[65];
int main()
{
int i,j,k,n;
while(~scanf("%s",s))
{
n=strlen(s);
for(i=2;i<=n;i++)//依次与2~n相乘
{
for(j=n;j>0;j--)//初始化ans
ans[j]=s[n-j]-'0';
for(j=1;j<=n;j++)
{
ans[j]=ans[j]*i+ans[j-1]/10;
ans[j-1]%=10;
}
if(ans[n]>=10)//长度超了肯定不满足题意
break;
bool ok=false;
for(j=0;j<n;j++)//枚举起点,判断是否有相同的
{
for(k=0;k<n;k++)
if(s[(j+k)%n]-'0'!=ans[n-k])
break;
if(k==n)//找到了一个相同的
{
ok=true;
break;
}
}
if(!ok)//与某一个i相乘不满足题意,直接break
break;
}
if(i>n)
printf("%s is cyclic\n",s);
else
printf("%s is not cyclic\n",s);
}
return 0;
}