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

    题意:小数化分数

    有限小数:小数点后面有几位就乘以 10^n 最后 分子则为乘积,分母则为1*10^n (记得约分)

    混无限循环小数:

    循环节+非循环节(’+‘表示连接起来)-非循环节=分子

    分母:循环节有几位(从左往右)就有几位9,非循环节有几位就有几位0

    比如:0.1(305)

    分子:1305-1

    分母:9990

    纯循环小数:

    设n=循环节的位数

    分子=10^n*(小数部分也就是循环节)

    分母=n位9

    例如:

    0.(3053)

    分子=3053

    分母=9999

    附代码

    View Code
     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<string.h>
     4 int gcd( int a,int b ){
     5     int r;
     6     while( b!=0 ){
     7         r=a%b;
     8         a=b;
     9         b=r;
    10     }
    11     return a;
    12 }
    13 int main(){
    14     char a[ 24 ];
    15     int num1[ 24 ],num2[ 24 ];
    16     int cnt1,cnt2;
    17     int t;
    18     scanf("%d",&t);
    19     while( t-- ){
    20         scanf("%s",a);
    21         int len=strlen(a);
    22         int flag=-1;
    23         cnt1=cnt2=0;
    24         for( int i=2;i<len;i++ ){
    25             if( flag==1 )
    26                 break;
    27             if( a[i]!='(' ){
    28                 num1[ cnt1++ ]=a[i]-'0';
    29             }
    30             else if( a[i]=='(' ){
    31                 flag=1;
    32                 for( int j=i+1;a[j]!=')';j++ ){
    33                     num2[ cnt2++ ]=a[j]-'0';
    34                 }
    35             }
    36         }
    37         int fenzi,fenmu;
    38         if( flag==-1 ){//有限小数
    39             fenmu=(int)(pow(10.0,cnt1));
    40             fenzi=0;
    41             int tt=0;
    42             for( int i=cnt1-1;i>=0;i-- ){
    43                 fenzi+=(num1[i]*(int)(pow(10.0,tt)));
    44                 tt++;
    45             }
    46             tt=gcd(fenzi,fenmu);
    47             printf("%d/%d\n",(fenzi/tt),(fenmu/tt));
    48             continue;
    49         }
    50         if( cnt1==0 ){//纯循环小数
    51             fenzi=fenmu=0;
    52             int tt=0;
    53             for( int i=cnt2-1;i>=0;i-- ){
    54                 fenzi+=(num2[i]*(int)(pow(10.0,tt)));
    55                 fenmu+=(9*(int)(pow(10.0,tt)));
    56                 tt++;
    57             }
    58             tt=gcd(fenzi,fenmu);
    59             printf("%d/%d\n",(fenzi/tt),(fenmu/tt));
    60             continue;
    61         }
    62         //混循环小数
    63         fenzi=fenmu=0;
    64         int tt=0;
    65         //fenmu=(int)(pow(10.0,cnt1));
    66         int delta=0;
    67         for( int i=cnt1+cnt2-1;i>=0;i-- ){
    68             if( i>=cnt1 ){
    69                 fenzi+=(num2[i-cnt1]*(int)(pow(10.0,tt)));
    70                 fenmu+=(9*(int)(pow(10.0,tt+cnt1)));
    71                 tt++;
    72             }
    73             else{
    74                 fenzi+=(num1[i]*(int)(pow(10.0,tt)));
    75                 delta+=(num1[i]*(int)pow(10.0,tt-cnt2));
    76                 //fenmu+=(9*(int)(pow(10.0,tt)));
    77                 tt++;
    78             }
    79         }
    80         fenzi-=delta;
    81     //    printf("ans:%d %d\n",fenzi,fenmu);
    82         tt=gcd(fenzi,fenmu);
    83         printf("%d/%d\n",(fenzi/tt),(fenmu/tt));
    84     }
    85     return 0;
    86 }
    keep moving...
  • 相关阅读:
    log4j
    hashContext
    sql语句
    css样式
    作业七:(二)疑问解答
    作业七:(1)翻译
    结对编程作业
    软件优缺点评价(补交)
    C#程序分析
    VS2013安装及测试练习
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2919702.html
Copyright © 2011-2022 走看看