HLG1125 循环小数2

循环小数 II
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 155(55 users) Total Accepted: 92(51 users) Rating: Special Judge: No
Description

对于一个小数,我们记作0.abcd(efgh),若其中含有括号,则其中用括号包围的是循环数。若不含有括号,则表示的是有限小数。

现在需要你求出给出的小数对应的最简分数表示形式。

Input

输入数据每行一个小数,最长非循环位为4位,最长循环数为4位,按照题目描述的方法表示

处理到文件结束

Output

输出给出的小数对应的最简分数表示形式

Sample Input
0.1
0.(1)
0.8(3)
Sample Output
1/10
1/9
5/6
Author
齐达拉图

其实不难,只需要记住一个转换公式即可,eg:

0.8(142),求该循环小数的分数形式;可以先设置该循环小数的结果为x

则-》8142.(142)==10000x

      8.(142)==10x

用第一个方程减去第二个方程便可以求得x

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
char str[20];
int gcd(int a,int b){
    if(b==0)
    return a;
    else
     gcd(b,a%b);
}

int main(){
    while(scanf("%s",str)!=EOF){
       int sum1=0,sum2=0;
      // getchar();
       int len=strlen(str);
      // printf("-->%d\n",len);
       int flag=-1;
       for(int i=0;i<len;i++){
           if(str[i]=='(')
              flag=i;

       }
       if(flag==-1){

           int xx=pow(10,len-2);
           int yy=0;
           for(int i=2;i<len;i++){
                int x=str[i]-'1'+1;
                yy=yy*10+x;
           }
           int yue=gcd(yy,xx);
           if(yue==1)
           printf("%d/%d\n",yy,xx);
           else
           printf("%d/%d\n",yy/yue,xx/yue);

       }
       else{
             int len1=flag-2;
             int len2=len-flag-2;
             int l1=0,l2=0;
             double r1,r2;
             r1=pow((double)10,len1+len2);
             r2=pow((double)10,len1);
          // printf("--->%d %d %lf %lf\n",len1,len2,r1,r2);
             for(int i=2;i<len;i++){
                 if(str[i]>='0'&&str[i]<='9')
                 l1=l1*10+str[i]-'1'+1;
             }
             for(int i=2;i<flag;i++){
                  l2=l2*10+str[i]-'1'+1;
             }
           int x2=l1-l2;
           int y2=(int)r1-(int)r2;
           int yue=gcd(x2,y2);
           if(yue==1)
           printf("%d/%d\n",x2,y2);
           else
           printf("%d/%d\n",x2/yue,y2/yue);

       }

       memset(str,0,sizeof(str));
    }
    return 0;
}

 

posted @ 2015-08-26 18:56  柳下_MBX  阅读(353)  评论(0编辑  收藏  举报