习题 3-8 循环小数(Repeating Decimals,ACM/ICPC World Finals 1990,Uva 202)

/*
*   思路: 1)打表,记录1-1990的小数   
*          2)寻找其周期 
*/         
#include
#include
int main()
{
    int a, b, i = 0;
    char s[2000];
    scanf("%d%d", &a, &b);
    printf("%d.(", a/b);
    while(1) {
        s[i++] = a*10/b + '0';
        a = a*10%b;
        if(i > 1990) break;
    }
    int l = strlen(s);
    int k;
    for(k = 1; k < l; k++) {
        int flag = 1;
        for(int j = 0; j < k; j++) {
            for(int p = 1; p*k < l/k; p++) {
                if(s[j] != s[j + p*k]) {
                    flag = 0;
                    break;
                }
            }
        }
        if(flag) break; 
    }
    s[k] = '\0';
    printf("%s)\n循环节长度为: %d", s, k);
    return 0;
 } 

你可能感兴趣的:(ACM/ICPC,Uva)