hdu 1717 小数转换为分数

(1)纯循环小数(仅指整数部分为0的)化成分数时,分数的分母由9组成,9的个数等于一个循环节的位数,分子是由一个循环节的各位数字组成。
如:0,234234234....=234/999
0.111111=1/9

(2)非纯循环小数化成分数时,分母由9和0组成,其中9的个数等于一个循环节的位数,0的个数等于非循环部分的位数。分子是从小数点后的第一位到第一个循环节的末位组成的数减去非循环部分。
如:0,76345345345。。。。=(76345-76)/99900
    0.0243434343.........=(243-2)/9900
  0.811111。。。。=(81-8)/90=73/90

#include<iostream>
#include<string>
using namespace std;
char s[20];
int hcf(int a,int b)
{
    int r=0;
    while(b!=0)
        {
        r=a%b;
        a=b;
        b=r;
        }
    return(a);
} 
int main()
{
	int n,a,b;
	scanf("%d",&n);
	while(n--)
	{
		int len;
		scanf("%s",s);
		len=strlen(s);
		a=b=0;
		int count=1,c=0;
		int i=2;
				while(i<len&&s[i]!='(')
				{
					a=a*10+(s[i]-'0');
					i++;
					count=count*10;
				}
				i++;
				b=a;
				while(i<len&&s[i]!=')')
				{
					b=b*10+(s[i]-'0');
					c=c*10+9;
					i++;
				}	
			if(a==b) {
				int f=hcf(a,count);
					printf("%d/%d\n",a/f,count/f);
			}
			else {
				int f=hcf(b-a,c*count);
				printf("%d/%d\n",(b-a)/f,c*count/f);
			}
	}
	return 0;
}
posted @ 2011-09-05 19:59  枕边梦  阅读(362)  评论(0编辑  收藏  举报