hdu 1717 --小数化分数2

来源:互联网 发布:mac mini win10 编辑:程序博客网 时间:2024/04/27 02:01

1.有限循环小数化成分数

 

例1:

 

0.5

 

0.5*10=5;

 

0.5 = 5/10 = 1/2;

 

 

例2:

 

0.3275

 

 

0.3275 * 10000 = 3275

 

0.3275 = 3275/10000 = 131/400 ;

 

 

2.无限循环小数化分数

 

例1:

 

0.(4)

 

0.(4) * 10 = 4.(4)        ①

 

0.(4) * 1 = 0.(4)          ②

 

① - ② = 0.(4) * 9 = 4;

 

0.(4) = 4/9 ;

 

 

例2:

 

0.32(692307)

 

0.32(692307) * 10^8 = 32692307.(692307)   ①

 

0.32(692307) * 100 = 32.(692307)                  ②

 

① - ② = 0.32(692307) *(10^8 - 10^2 ) = 32692307 - 32

 

0.32(692307)  = (32692307 - 32) / (10^8 - 10^2 ) ;

 

 

3.无限不循环小数无法化成分数

 

CODE:

 

[cpp] view plaincopy
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. int gcd( int a, int b)  
  5. {  
  6.     while(b)   
  7.     {   
  8.         a %= b;   
  9.         a ^= b;   
  10.         b ^=a; a ^=b;   
  11.     }  
  12.     return a;  
  13. }  
  14.   
  15. int base[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};  
  16. int main()  
  17. {  
  18.       
  19.     int t,i;  
  20.     scanf("%d",&t);  
  21.     char str[20];  
  22.     while(t--)  
  23.     {  
  24.         scanf("%s",str);  
  25.         int len=strlen(str);  
  26.         len-=2;  
  27.         for(i=0;i<len;i++)  
  28.             str[i]=str[i+2];  
  29.         str[len]=0;  
  30.         int sum=0,k=0,ans,sum2=0;  
  31.         bool judge=true;  
  32.         for(i=0;i<len;i++)  
  33.         {  
  34.             if(str[i]=='(')  
  35.             {  
  36.                 k=i;  
  37.                 judge=false;  
  38.             }  
  39.             if(str[i]>='0'&&str[i]<='9')  
  40.             {  
  41.                 sum = sum*10+str[i]-'0';  
  42.                 if(judge)  
  43.                     sum2=sum2*10+str[i]-'0';  
  44.             }  
  45.         }  
  46.         if(!judge)  
  47.         {  
  48.             ans =base[len-2]-base[k];  
  49.             sum-=sum2;  
  50.         }  
  51.         else  
  52.             ans=base[len];  
  53.         int r = gcd(sum,ans);  
  54.         printf("%d/%d\n",sum/r,ans/r);  
  55.     }  
  56.     return 0;  
  57. }  
原创粉丝点击