UVa 202 - Repeating Decimals

来源:互联网 发布:加工中心圆怎么编程 编辑:程序博客网 时间:2024/06/12 22:51

  输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为0.(116279069767441860465),循环节长度为21。

#include<stdio.h>#include<string.h>int str[10000];int sh[10000];int gcd(int a,int b){if(b == 0)  return a;return gcd(b,a%b);}int main(){int a,b,r,d,m,n,flag,start,end;    while(scanf("%d%d",&a,&b)!=EOF)    {        r = a/b;        d = gcd(a,b);        m = a/d;        n = b/d;        sh[0] = m%n;        int i = 0;        flag = 0;        printf("%d/%d = %d.",a,b,r);        while(!flag)        {        int c = sh[i]*10;            str[i] = c/n;            sh[++i] = c%n;            for(int j=0; j < i; j++)            {              if(sh[i] == sh[j])              {                start = j;                end = i;                flag = 1;                break;              }            }        }        for(int i=0;i < start;i++)            printf("%d",str[i]);        printf("(");        if(end - start<=50)        {            for(int i = start; i < end; i++)                printf("%d",str[i]);        }        else        {            for(int i = start ; i < start+50; i++)                printf("%d",str[i]);            printf("...");        }        printf(")\n");        printf("   %d = number of digits in repeating cycle\n\n",end-start);    }    return 0;}


0 0
原创粉丝点击