您的位置:首页 > 其它

小数转分数

2017-02-24 18:04 344 查看
简述
初中学数学的时候,小明最头痛的就是小数。最最头痛的就是循环小数。最最最头痛的就是老师总是喜欢让他把小数转成分数。偶尔遇到循环小数转分数的题目,小明总是想到辍学出去打工。一个初中生,出去能干什么呢?大家写段代码,帮帮这个可怜的孩子吧,他还年轻。
输入
输入包含两行,第一行为一个整数N,代表接下来有N组待转换的小数。然后为待转换的小数。每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。 注意:小数的位数不超过9位指的是输入的时候小数点后的数字的个数不超过9位,比如说0.32(692307)表示这个小数的位数是8位。 
输出
对每一个对应的小数化成最简分数后输出,占一行。 
样例输入
3
0.(4)
0.5
0.32(692307)
0
样例输出
4/9
1/2
17/52

直到输入待测数据组数N为0的时候,程序终止!

我的代码

#include<cstdio>

#include<iostream>

#include<cstring>

using namespace std;

void fun(int& a,int& b,int c,int d)

{

    unsigned long long b1,a1,m,i,t1=a,t2=b,t3=c,t4=d;

    b1=t2*t4,a1=t1*t4+t2*t3;

    m=min(a1,b1);

    for(i=2; i<=m; i++)

        if(a1%i==0&&b1%i==0)

        {

            a1/=i;

            b1/=i;

            i=1;

            m=min(a1,b1);

        }

    a=a1,b=b1;

}

int Pow(int i)

{

    int t=1;

    for(int j=1; j<=i; j++)

        t*=10;

    return t;

}

int P1(int i)

{

    int t=0;

    for(int j=1; j<=i; j++)

        t=t*10+9;

    return t;

}

int main()

{

    int a,i,a1,a2,n,flag;

    char s1[10],s2[10],s3[10],t;

    while(cin>>n&&n)

    {

        getchar();

        while(n--)

        {

            flag=0;

            s1[0]=s1[0]=s3[0]=0;

            i=0;

            t=getchar();

            if(t=='-')

                flag=1;

            else

                s1[i++]=t;

            while(1)

            {

                t=getchar();

                if(t=='\n')

                {

                    s1[i]=0;

                    goto End;

                }

                if(t=='.')

                {

                    s1[i]=0;

                    break;

                }

                s1[i++]=t;

            }

            i=0;

            while(1)

            {

                t=getchar();

                if(t=='(')

                {

                    s2[i]=0;

                    break;

                }

                if(t=='\n')

                {

                    s2[i]=0;

                    goto End;

                }

                s2[i++]=t;

            }

            i=0;

            while(1)

            {

                t=getchar();

                if(t==')')

                {

                    s3[i]=0;

                    getchar();

                    goto End;

                }

                s3[i++]=t;

            }

End:

            ;

            a1=0;

            a2=1;

            if(strlen(s1)!=0&&s1[0]!='0')

            {

                sscanf(s1,"%d",&a);

                a1=a;

            }

            if(strlen(s2)!=0)

            {

                sscanf(s2,"%d",&a);

                fun(a1,a2,a,Pow(strlen(s2)));

            }

            if(strlen(s3)!=0)

            {

                sscanf(s3,"%d",&a);

                fun(a1,a2,a,P1(strlen(s3))*Pow(strlen(s2)));

            }

            if(flag)

                cout<<'-';

            cout<<a1<<'/'<<a2<<endl;

        }

    }

    return 0;

}

$(".MathJax").remove();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: