-
描述
- n 位的一個整數是循環數(cyclic)的條件是:當用一個 1 到 n 之間的整數去乘它時, 會得到一個將原來的數首尾相接循環移動若干數字再在某處斷開而得到的數字。也就是說,如果把原來的數字和新的數字都首尾相接,他們得到的環是相同的。只是兩個數的起始數字不一定相同。例如,數字 142857 是循環數,因爲:
142857 *1 = 142857
142857 *2 = 285714
142857 *3 = 428571
142857 *4 = 571428
142857 *5 = 714285
142857 *6 = 857142
-
輸入
- 寫一個程序確定給定的數是否是循環數。輸入包括多個長度爲 2 位到 60 位的整數。(注意,先導的0也是合理的輸入不應該被忽略,例如 "01"是 2 位數,"1" 是 1 位數。)
-
輸出
- 對於每一個輸入的整數,輸出一行表明它是否是循環數。
-
樣例輸入
-
142857
142856
142858
01
0588235294117647
-
樣例輸出
-
142857 is cyclic
142856 is not cyclic
142858 is not cyclic
01 is not cyclic
0588235294117647 is cyclic
//水題一枚。
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int i, f, l, j, k, x;
char a[99];
while(cin>>a)
{
l = strlen(a);
x=j=f=0;
k=l+1;
for(i=l-1; i; i--)
{
x += (a[i]-'0')*k;
if(x%10!=9) {f = 1;break;}
x = x/10;
}
l = (l+1)/2;
for(i=0;i<l; i++)
{
if(a[i]+a[i+l]-2*'0'!=9)
{
f=1;
break;
}
}
if(f) cout << a << " is not cyclic\n";
else cout << a << " is cyclic\n";
}
return 0;
}