您的位置:首页 > 其它

UVA - 202 Repeating Decimals

2015-06-16 07:10 309 查看
//

后面的模数和前面相等的时候就循环了 注意状态开始的地方

//

#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
const int maxn = 10000;
int vis[maxn+5];
int res[maxn+5];
int main()
{
    int n, m;
    while(scanf("%d%d", &n, &m) != EOF)
    {
        memset(vis,0,sizeof(vis));
        memset(res,0,sizeof(res));
        printf("%d/%d = %d.",n, m, n/m);
        n %= m;
        if(n==0)
        {
            cout << "(0)" << endl;
            cout << "   1 = number of digits in repeating cycle" << endl; cout << "\n"; continue;
        }
        int s, t;
        bool ok = false;
        for(int i = 1; i < maxn; ++i)
        {
            if(!res[n%m])
            {
                res[n%m] = i;
                n*=10;
                vis[i] = n/m;
                n%=m;
            }
            else
            {
                s = res[n%m];
                t = i;
                break;
            }
        }
        for(int i = 1; i < s; ++i) cout << vis[i];
        cout << "(";
        for(int i = s; i < s+50 && i < t; ++i) cout << vis[i];
        if(t-s>50) cout << "...";
        cout << ")" << endl;
        printf("   %d = number of digits in repeating cycle\n\n", t - s);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: