题意:
无限小数化分数。
转自:
http://blog.csdn.net/xinghongduo/article/details/6231107
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>
#define LL long long
#define lson lo, mi, rt << 1
#define rson mi + 1, hi, rt << 1 | 1
using namespace std;
const int maxn = 20000 + 10;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = acos(-1.0);
const double ee = exp(1.0);
int gcd(int a,int b)
{
if(!a)
return b;
return gcd(b%a,a);
}
int main()
{
char str[100];
int num,k,all,a,b,i,j,mina,minb,l;
while(cin>>str&&strcmp(str,"0"))
{
mina=minb=inf;
for(i=2,all=0,l=0; str[i]!='.'; i++)
{
all=all*10+str[i]-48;
l++;
}
for(num=all,k=1,i=1; i<=l; i++)
{
num/=10;
k*=10;
a=all-num;
b=(int)pow(10.0,l-i)*(k-1);
j=gcd(a,b);
if(b/j<minb)
{
mina=a/j;
minb=b/j;
}
}
cout<<mina<<'/'<<minb<<endl;
}
return 0;
}