首页 > 代码库 > 有限小数化为最简分数

有限小数化为最简分数

/*

请将有限小数化为最简分数。

Input

一个整数n 表示需要转化的小数个数; 接下来n行,每行有一个有限小数。(保证小数位数不超过9位)

Output

输出有n行,每行为小数对应的最简分数

Sample Input

2
0.5
0.4

Sample Output

1/2 2/5

注意精度问题,数据保证不会有类似1.0的小数。

*/

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int Gcd(int a,int b){
    if(a<b){
        int t;
        t = a;
        a = b;
        b = t;
    }
    return b!=0?Gcd(b,a%b):a;
}
char str[50],str2[50];
int main() {
    int t,i,k,count,big,small,mul1,mul2,gcd,sum;
    cin>>t;
    while(t--)
        {
        cin>>str;
        count = 0;
        int len = strlen (str);
        for(i=0; i< len;i++){
            if(str[i]!=‘.‘){
                count++;

            }
            else{
                break;
            }
        }

        mul1 = mul2 = 1;
        sum = big = small = 0;
        for(i=0; i<count; i++){//整数

            big = str[i]-‘0‘+ big*10;
            mul1 *= 10;
        }
        for(i=count+1; i<strlen(str); i++){ //小数

            small = str[i]-‘0‘+ small*10;
            mul2 *= 10;
        }

        big*=mul2;
        sum+=(big + small);
        gcd = Gcd(sum,mul2);
        cout<<sum/gcd<<‘/‘<<mul2/gcd<<endl;

    }
    return 0;
}

有限小数化为最简分数