hdoj 1717 小数化分数2【水】

/*
循环小数化分数:
小数形式:循环部分&循环部分  【&】表示连接 
分数形式: (非循环部分&循环部分)/( (10^(循环节位数)-1)^(非循环节位数) )
例:
0.32(692307)
32692307 / 99999900 = 17/52 
注意的输入:0.00(1) 
*/
#include<stdio.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#define PI 3.1415926
#define STOP system("pause")
using namespace::std;
int gcd(int a, int b)
{
	while(b^=a^=b^=a%=b);
	return a;
}
int bits(int x)
{
	int ans = 0;
	while(x)
	{
		ans ++;
		x /= 10;
	}
	return ans;
}
int main()
{
	int a, b, t, n, b1, b2, x, y, i;
	char temp;
	scanf("%d", &n);
	while(n--)
	{
		a = b = 0;
		scanf(" 0.");
		i = 0;
		while(temp = getchar(), temp >= '0' && temp <= '9')
		{
			a = a * 10 + (temp -'0');
			i ++;
		}
		b1 = i;
		if(temp == '\n')
		{
			y = 1;
			for(i=0;  i<b1;  i++)
				y *= 10;
			x = a;
			t = gcd(x, y);
			printf("%d/%d\n", x/t, y/t);
			continue;
		}
		i = 0;
		while(temp = getchar(), temp >= '0' && temp <= '9')
		{
			b = b * 10 + temp -  '0';
			i++;
		}
		b2 = i;
		x = a;
		for(i=0; i<b2; i++)
			x *= 10;
		x += b;
		x -= a;
		y = 1;
		for(i=0; i<b2; i++)
			y *= 10;
		y -= 1;
		for(i=0; i<b1; i++)
			y *= 10;
		t = gcd(x, y);
		printf("%d/%d\n", x / t,  y / t);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值