百練2952:循環數


總時間限制: 
1000ms 
內存限制: 
65536kB
描述
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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章