HDU 1717 小数化分数2

来源:互联网 发布:java简单工厂模式代码 编辑:程序博客网 时间:2024/03/28 16:39

小数化分数2

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2841    Accepted Submission(s): 1157


Problem Description
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
 

Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
 

Output
对每一个对应的小数化成最简分数后输出,占一行。
 

Sample Input
30.(4)0.50.32(692307)
 

Sample Output
4/91/217/52
 

Source
2007省赛集训队练习赛(2)
 

NEFU114的加强版

代码如下:

#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int gcd(int a,int b){    return b==0?a:gcd(b,a%b);}int main(){    char str[20];    int T;    scanf("%d",&T);    while(T--)    {        scanf("%s",str);        int len = strlen(str);        int i,j;        int flag = 1;        int ans1 = 0,ans2 = 0;        int shi1 = 1,shi2 = 1;        for(i = 2;i < len;i++)        {            if(str[i] == '(')            {flag = 0;}            if(str[i] >= '0'&&str[i] <= '9')            {                if(flag)                {                    shi1 = shi1*10;                    ans1 = ans1*10+str[i]-'0';                }                shi2 = shi2*10;                ans2 = ans2*10+str[i]-'0';            }        }        if(flag)        {            printf("%d/%d\n",ans1/gcd(ans1,shi1),shi1/gcd(ans1,shi1));        }        else        {            int cnt = gcd((ans2-ans1),(shi2-shi1));            printf("%d/%d\n",(ans2-ans1)/cnt,(shi2-shi1)/cnt);        }    }    return 0;}















0 0