HDU-1717(小数化分数2)

Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
对每一个对应的小数化成最简分数后输出,占一行。
Sample Input
3
0.(4)
0.5
0.32(692307)
Sample Output
4/9
1/2
17/52

循环小数化分数的方法请参考这个博主的,链接在这里给出了,感兴趣的小伙伴们可以去看一下哈https://wenku.baidu.com/view/561773c62cc58bd63186bd87.htm

AC代码

#include<stdio.h>
#include<string.h>

//求出a,b的最大公约数 
int gcd(int a,int b){
	if(b==0)
		return a;
	return gcd(b,a%b);
} 

int main(void){
	int t,n;
	char s[15];
	scanf("%d ",&t);
	
	while(t--){
		
		scanf(" %s",&s);
		n=strlen(s);
		
		//求出循环体前边的数 
		int x=0,y=1,i;
		for(i=2;i<n;i++){
			if(s[i]!='(') {
				x=10*x+s[i]-'0';// 分子扩大 
				y=10*y;//分母扩大和分子一样 
			}else{
				break;
			}	
		}
		
		//不是循环小数 
		if(i==n){
			int d=gcd(x,y);
			printf("%d/%d\n",x/d,y/d);
			continue;
		}
		
		//求出整个有循环体的小数 
		int xx=x,yy=y;
		for(int j=i+1;j<n;j++){
			if(s[j]!=')'){
				xx=10*xx+s[j]-'0';
				yy=10*yy;
			}else{
				break;
			}
		}
		
		int a=xx-x;
		int b=yy-y;
		printf("%d/%d\n",a/gcd(a,b),b/gcd(a,b));
		
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值