需要用到高精度乘法 比如 142857 首先获取该字符串长度为6 循环6次
142857 *1 = 142857
142857 *2 = 285714
142857 *3 = 428571
142857 *4 = 571428
142857 *5 = 714285
142857 *6 = 857142
获得不同的字符串
将原来的串加倍:142857142857 string.find查找是否是子串即可
#include<iostream>
#include<string>
using namespace std;
string cheng(string,int);
int main()
{
string a;
cin>>a;
string na = a+a;
int len = a.size();
for(int i =1;i<=len;i++)
{
string s = cheng(a,i);
if(na.find(s)==string::npos)
{
cout<<0;
return 0;
}
}
cout<<1;
return 0;
}
string cheng(string n,int a)
{
int na[1000]={0};
int l = n.size();
for(int i = 0;i<l;i++)
{
na[i] = n[l-1-i]-48;
}
for(int i = 0;i<l;i++)
{
na[i] = na[i]*a;
}
for(int i = 0;i<l+70;i++)
{
if(na[i]>=10)
{
na[i+1] = na[i+1] + na[i]/10;
na[i] = na[i]%10;
}
}
int p = 0;
for(int i = l+70;i>=0;i--)
{
if(na[i]!=0)
{
p = i;
break;
}
}
string r = "";
for(int i = 0;i<=p;i++)
{
r = (char)(na[i]+48) + r;
}
return r;
}