题解思路:
将原字符串再复制一次就可以做包含操作了。
代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
typedef long long ll;
const int mx = 1e2+10;
int n,m;
char str[mx],s[mx],a[mx];
int num[mx];
bool check(int len)
{
for(int i=2,k=0;i<=len;i++){
for(int j=len-1;j>=0;j--,k++)
num[k] = (str[j]-'0')*i;
int j = 1,c = num[0]/10;
num[0] %= 10;
while(j<k){
num[j] += c;
c = num[j]/10;
num[j] %= 10;
if(j==k-1&&c) k++;
j++;
}
for(int j=k-1;j>=0;j--) a[j] = num[k]+'0';
a[k] = 0;
if(!strstr(str,a)) return 0;
}
return 1;
}
int main()
{
while(~scanf("%s",str)){
int len = strlen(str);
for(int i=0;i<2*len;i++) s[i] = str[i%len];
s[2*len] = 0;
if(check(len)) printf("%s is cyclic\n",str);
else printf("%s is not cyclic\n",str);
}
return 0;
}