zoukankan      html  css  js  c++  java
  • 小数化分数2

    小数化分数2

    Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 50   Accepted Submission(s) : 26
    Problem Description
    Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
     
    Input
    第一行是一个整数N,表示有多少组数据。 每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
     
    Output
    对每一个对应的小数化成最简分数后输出,占一行。
     
    Sample Input
    3 0.(4) 0.5 0.32(692307)
     
    Sample Output
    4/9 1/2 17/52
     
    Source
    2007省赛集训队练习赛(2)
     
     1 #include<stdio.h>
     2 int fun(int a,int b)
     3 {
     4      while(a>b?(a%=b):(b%=a));
     5      return a+b;
     6 }
     7 int main()
     8 {
     9      int T,n,i,j,k,l,x,y,sign1,sign2;
    10      char num[30];
    11      scanf("%d",&T);
    12      while(T--)
    13      {
    14           scanf("%s",num);
    15           j=sign1=sign2=x=y=0;
    16           k=l=1;
    17           for(i=2;num[i]!='';i++)
    18           {
    19                if(j==0&&num[i]!='(')
    20                {
    21                     sign1++;
    22                     x*=10;
    23                     x+=num[i]-'0';
    24                }
    25                if(j==1&&num[i]!=')')
    26                {
    27                     sign2++;
    28                     y*=10;
    29                     y+=num[i]-'0';
    30                }
    31                if(num[i]=='(')
    32                {
    33                     j=1;
    34                     sign2=sign1;
    35                     y=x;
    36                }
    37           }
    38           if(sign2==0)
    39           {
    40            while(sign1--)
    41                 k*=10;
    42             n=fun(x,k);
    43             x/=n;
    44             k/=n;
    45             printf("%d/%d
    ",x,k);
    46           }
    47           else
    48           {
    49                 x=y-x;
    50            while(sign1--)
    51                 k*=10;
    52            while(sign2--)
    53                 l*=10;
    54            k=l-k;
    55            n=fun(x,k);
    56            x/=n;
    57            k/=n;
    58            printf("%d/%d
    ",x,k);
    59           }
    60      }
    61      return 0;
    62 }
    View Code
    转载请备注:
    **************************************
    * 作者: Wurq
    * 博客: https://www.cnblogs.com/Wurq/
    * Gitee: https://gitee.com/wurq
    **************************************
  • 相关阅读:
    【Luogu】P1419寻找段落(单调队列)
    【Luogu】P1411树(树形高精DP)
    【Luogu】P2886牛继电器(矩阵加速floyd)
    【Luogu】P2657windy数(数位DP)
    【Luogu】P3521ROT-Tree Rotations(线段树合并)
    24-Perl 数据库连接
    23-Perl 面向对象
    22-Perl Socket 编程
    21-Perl 发送邮件
    20-Perl 正则表达式
  • 原文地址:https://www.cnblogs.com/Wurq/p/3750291.html
Copyright © 2011-2022 走看看