hdu 1717

三种情况:

1.不循环小数 :   分子是小数部分,分母是10^(小数部分长度) 例如:0.5   5 / 10^1  化为最简即可

2.纯循环小数:   是指从小数点第一位开始循环的。 分母都由9组成,9的个数就是一个循环节里数字的个数, 分子是一个循环节;例如:0.(123) 123/999   化为最简即可。

3.混循环小数:是指不是从小数点后一位开始循环的。 分母由9和0组成,9的个数是一个循环节里数字的个数,0是等于不循环数字的个数。分子等于不循环数与第一个循环节减去不循环数;例如:0.12(345) (12345 - 12)/ 99900  化为最简即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;

int gcd(int x1,int x2){
	while(x2 != 0){
		int temp = x1 % x2;
		x1 = x2;
		x2 = temp;
	}
	return x1;
}
int main(int argc, char *argv[])
{
	//freopen("D:\\c - free\\hdu_1717b\\input.txt","r",stdin);
	int T;
	cin>>T;
	//getchar();
	while(T--){
		int mu1,mu2,zi1,zi2;
		mu1=mu2=1;
		zi1=zi2=0;
		int flag = 1;
		char s[20];
		cin>>s;
		for (int i = 2;i < strlen(s);i++){
			if (s[i] == '(') flag = 0;
			if (isdigit(s[i])){
				if (flag){
					mu1 *= 10;
					zi1 = zi1 * 10 + s[i]-'0'; 
				}
				mu2 *= 10;
				zi2 = zi2 * 10 + s[i] - '0';
			}
		}
		//cout<<"zi1="<<zi1<<" zi2="<<zi2<<" mu1="<<mu1<<" mu2="<<mu2<<endl;
		if (flag){
			int dig = gcd(mu1,zi1);
			printf("%d/%d\n",zi1/dig,mu1/dig);
		}else{
			printf("%d/%d\n",(zi2-zi1)/gcd(zi2-zi1,mu2-mu1),(mu2-mu1)/gcd(zi2-zi1,mu2-mu1));
		}
	}
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值