思路

zxpisme 2023-10-18 16:40:52 2023-10-18 16:41:16 5

需要用到高精度乘法 比如 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;
}
{{ vote && vote.total.up }}