1 在失败当中寻找成功。
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
using namespace std;
#define MAX 100
char boss[MAX];int newboss[MAX];int newbosskey;int news[MAX];int newskey;
void boss_newboss()
{
int i=0;char temp[MAX];
newbosskey=strlen(boss)/2;
for(i=0;i<strlen(boss);i++)
{
temp[strlen(boss)-i-1]=boss[i];
}
for(i=0;i<strlen(boss);i=i+2)
{
newboss[i/2]=(temp[i]-'0')+(temp[i+1]-'0')*10;
}
}
void boss_news(int n)
{
//转化分两部,第一部反转
char temp[MAX];int i;
//这个初始化很重呀,因为后边要乘,这里做是为啦不出现负值
for(i=0;i<MAX;i++)
{
temp[i]='0';
}
for(i=0;i<strlen(boss);i++)
{
temp[i]=boss[strlen(boss)-1-i];
}
//反转完成以后,开始转存
int pass[MAX];int passkey=strlen(boss)/2;
for(i=0;i<=strlen(temp);i++,i++)//这里这样写是因为7到达8的时候也行
{
pass[i/2]=(temp[i]-'0')+(temp[i+1]-'0')*10;
}
//开始计算
int carry=0;
for(i=0;i<passkey;i++)
{
int result=pass[i]*n+carry;
//如果说不能够除尽
if(result/100>0)
{
int zhen=result/100;
int yush=result%100;
pass[i]=yush;
carry=zhen;
}
else
{
int yush=result%100;
pass[i]=yush;
carry=0;
}
}
//最后一位
int result=pass[passkey]*n+carry;
if(result/100>0)
{
int zhen=result/100;
int yush=result%100;
pass[passkey]=yush;
pass[passkey+1]=zhen;
passkey++;
}
else
{
int yush=result%100;
pass[passkey]=yush;
}
//输出
for(i=0;i<passkey;i++)
{
news[i]=pass[i];
}
newskey=passkey;
}
int compare(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int same()
{
if(newbosskey!=newskey)
{
return 0;
}
else
{
int j=0;
for(j=0;j<newskey;j++)
{
if(newboss[j]!=news[j])
{
return 0;
}
}
return 1;
}
}
int main()
{
freopen("input.txt","r",stdin);
while(scanf("%s",boss)!=EOF)
{
boss_newboss();int i=1;int n=strlen(boss);int sameflag=1;
for(i=1;i<=n;i++)
{
boss_news(i);
qsort(newboss,newbosskey,sizeof(int),compare);
qsort(news,newskey,sizeof(int),compare);
if(!same())
{
sameflag=0;break;
}
}
if(sameflag==0)
{
printf("%s is not cyclic\n",boss);
}
else
{
printf("%s is cyclic\n",boss);
}
}
return 0;
}
/*
1 char比较
int compare(const void *a,const void *b )
{
return strcmp((char *)a,(char *)b);
}
2 int比较
int compare(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
3
必须一个一个比较,如果两个两个的比较。
142857和428571会不相同。
*/