A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题意就是 将循环小数  化为 分数

代码如下,

#include<cstdio>

#include<cstring>

#include<cstdlib>

#include<cmath>

char s[20],a[20],b[20];


int gcd(int x, int y)

{

    int temp;

    while(x%y)

    {

        temp = x%y;

        x = y;

        y = temp;

    }

    return y;

}

int main()

{

    int t;

    scanf("%d",&t);

    while(t--)

    {

        scanf("%s",s)

        int ls = strlen(s),i;

        int x=0,y=0,fx=0,fy=0;

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

        {

            if(s=='(')

            {

                fy = fx;

                y = x;

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

                {

                    if(s[j]==')') break;

                    y *= 10;

                    y += s[j] - '0';

                    fy ++;

                }

                break;

            }

            x *= 10;

            x += s-'0';

            fx++;

        }

        if(fy==0)

        {

            int fm = 1;

            while(fx--)

                fm *= 10;

            int tf = gcd(x,fm);

            printf("%d/%d\n",x/tf,fm/tf);

        }

        else

        {

            int px=1,py=1;

            while(fx--)

                px *= 10;

            while(fy--)

                py *= 10;

            int tp = py-px;

            int ty = y - x;

            int tf = gcd(ty,tp);

            printf("%d/%d\n",ty/tf,tp/tf);

        }

    }

    return 0;

}

12 个回复

倒序浏览
厉害的说。。。。
回复 使用道具 举报
没注释的说。。。。
回复 使用道具 举报
大龄产妇 发表于 2014-5-28 22:36
没注释的说。。。。

太简单了- -  赶脚不需要的说
回复 使用道具 举报

:P 基础题吧
回复 使用道具 举报
马凯文 发表于 2014-5-28 23:07
大神啊  赞一个,哈哈

:Q努力赚分中
回复 使用道具 举报
不明觉厉啊...
高手请照顾一下小朋友...{:3_62:}
回复 使用道具 举报
an1911 中级黑马 2014-5-29 10:37:58
8#
学习学习
回复 使用道具 举报
楼主真是厉害
回复 使用道具 举报

:P楼主比你想象的还要厉害
回复 使用道具 举报
夏沫的黄昏′ 发表于 2014-5-29 11:20
楼主比你想象的还要厉害

楼主这么厉害 和楼主交个朋友吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马