题解思路:

将原字符串再复制一次就可以做包含操作了。

 

代码:

 

#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;
}