Uva202

来源:互联网 发布:网络课程plc网络教育 编辑:程序博客网 时间:2024/05/17 00:56

题目链接

是一道模拟题,但是方法自己无法想到,搜了博客后才知道。手动模拟除法的过程,但是需要判断哪些位数是循环位,也知道一种判断循环小数有多少位的方法了

#include <iostream>  #include <cstring>#include <cstdio>#include <algorithm>#include <string>#include <string.h>#include <cmath>using namespace std;const int maxn = 3010;int v[maxn], result[maxn];int a, b, cnt;char s[maxn][maxn], temp[maxn];int main(){    while (cin >> a >> b)    {        printf("%d/%d = %d.", a, b, a / b);        memset(v, 0, sizeof(v));        a = a%b;        cnt = 0;        while (!v[a])//判断是否是循环节了        {            result[++cnt] = (a * 10) / b;              v[a] = cnt;            a = (a * 10) % b;          }        for (int i = 1; i <= cnt&&i<51; i++)        {            if (i == v[a])                printf("(");            printf("%d", result[i]);            if (i == 50)                printf("...");        }        printf(")\n   %d = number of digits in repeating cycle\n\n", cnt - v[a] + 1);    }    //system("pause");}
原创粉丝点击