有限小数化为最简分数

/*

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

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;
}

时间: 2024-10-12 13:37:58

有限小数化为最简分数的相关文章

小数化为最简分式 (hdu 1717)

hdu 1717 小数化分数 分析: 无限小数可按照小数部分是否循环分成两类:无限循环小数和无限不循环小数. 无限不循环小数不能化分数; 考虑:无限循环小数又是如何化分数的呢? 例如:0.325656--×100=32.5656--① 0.325656--×10000=3256.56--② 用②-①即得: 0.325656--×9900=3256.5656---32.5656-- 0.325656--×9900=3256-32 所以, 0.325656--=3224/9900 代码: #incl

福州大学第十二届程序设计竞赛 (部分题解)

比赛链接:http://acm.fzu.edu.cn/contest/list.php?cid=144 Problem B 完美的数字 Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description Bob是个很喜欢数字的孩子,现在他正在研究一个与数字相关的题目,我们知道一个数字的完美度是 把这个数字分解成三个整数相乘A*A*B(0<A<=B)的方法数,例如数字80可以分解成1*1*80,2*2*20 ,4*4*5,所以

(hdu step 2.1.8)小数化分数2(小数化分数——包括了循环小数化分数的情况)

题目: 小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2783 Accepted Submission(s): 993   Problem Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?请你写一个程序不但可以

浮点数(有限浮点数、无限循环浮点数)的精确表达

在计算机中,是否decimal或者float或者double来存储小数是不能得到精确值得.如果你希望能得到精确的计算结果,最好是用分数形式来表示小数.有限小数或者无限循环小数都可以转化为分数. 例如: 0.9=9/10 0.333(3)=1/3 给定一个小数,它的形式为0.34.0.30.0.33(33)......形如这些的小数把它们转化成分数形式(最简分数). 首先我们先定义一个分数类和小数类 1 /// <summary> 2 /// 分数类 3 /// </summary>

小数化分数2

小数化分数2 题目 Problem Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数. Input 第一行是一个整数N,表示有多少组数据. 每组数据只有一个纯小数,也就是整数部分为0.小数的位数不超过9位,循环部分用()括起来. Output 对每一个对应的小数化成最简分数后输出,占一行. Sample

hdu1717 小数化分数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1717 小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5375    Accepted Submission(s): 2188 Problem Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他

ACM学习历程—HDU1717 小数化分数2(gcd)

Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数. Input 第一行是一个整数N,表示有多少组数据. 每组数据只有一个纯小数,也就是整数部分为0.小数的位数不超过9位,循环部分用()括起来. Output 对每一个对应的小数化成最简分数后输出,占一行. Sample Input 3 0.(4) 0.5

hdu1717 小数化分数2

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1717 小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2921    Accepted Submission(s): 1187 Problem Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式

无限小数转分数POJ1930分析

将无限小数化为分数,有一套简单的公式.使其轻松表示出来. 循环节 例如:0.121212…… 循循环节为12. 公式 这个公式必须将循环节的开头放在十分位.若不是可将原数乘10^x(x为正整数) 就为:12.121212……-0.121212……=12 100倍 - 1倍 =99 (99和12之间一条分数线) 此公式需用两位数字,其中两位数差出一个循环节. 再举一个例子:0.00121212…… 公式就变为:1212.121212……-12.121212……=1200 100000 倍 - 10