小数化分数2

整数化小数,不循环的小数容易化。对于循环小数化分数原理如下:

⑴    把0.4747……和0.33……化成分数。
例1:        0.4747……×100=47.4747……   
0.4747……×100-0.4747……=47.4747……-0.4747……
(100-1)×0.4747……=47
即99×0.4747…… =47 
那么  0.4747……=47/99
例2: 0.33……×10=3.33……
0.33……×10-0.33……=3.33…-0.33……
 (10-1) ×0.33……=3
即9×0.33……=3
 那么0.33……=3/9=1/3

由此可见, 纯循环小数化分数,它的小数部分可以写成这样的分数:纯循环小数的循环节最少位数是几,分母就是由几个9组成的数;分子是纯循环小数中一个循环节组成的数。
⑵把0.4777……和0.325656……化成分数。
例1:0.4777……×10=4.777……①
0.4777……×100=47.77……②
用②-①即得: 
0.4777……×90=47-4
所以, 0.4777……=43/90
例2:0.325656……×100=32.5656……①
0.325656……×10000=3256.56……②
用②-①即得: 
0.325656……×9900=3256.5656……-32.5656……
0.325656……×9900=3256-32
所以, 0.325656……=3224/9900



#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int gcd(int x,int y)
{
    return y?gcd(y,x%y):x;
}
void getans(char *str,int &a,int &b,int strl)
{
    int len1=1,i,t1=0;
    for(i=2;str[i]!='('&&i<strl;i++){
        len1*=10;
        t1=t1*10+str[i]-'0';
    }
    if(str[i]!='('){
        int pre=gcd(t1,len1);
        t1/=pre;
        len1/=pre;
        a=t1;b=len1;
        return;
    }
    int len2=len1,t2=t1;
    for(i=i+1;str[i]!=')'&&i<strl;i++){
        len2*=10;
        t2=t2*10+str[i]-'0';
    }
    a=t2-t1;
    b=len2-len1;
    int pre=gcd(a,b);
    a/=pre;
    b/=pre;

}
int main()
{
    int n;cin>>n;
    while(n--)
    {
        char ch[100];int a,b;
        scanf("%s",ch);
        getans(ch,a,b,strlen(ch));
        printf("%d/%d\n",a,b);
    }
}

 

 

 

Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。 
 
Input

第一行是一个整数N,表示有多少组数据。 
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。 
 
Output

对每一个对应的小数化成最简分数后输出,占一行。
 
Sample Input

 3
0.(4)
0.5
0.32(692307)
        
 
Sample Output

 4/9
1/2
17/52 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值