`

11076 浮点数的分数表达

阅读更多

11076 浮点数的分数表达 

 

Description

在计算机中,用float或double来存储小数有时不能得到精确值,若要精确表达一个浮点数的计算结果, 最好用分数来表示小数,有限小数或无限循环小数都可以转化为分数,无限循环小数的循环节用括号标记出来。如: 0.9 = 9/10 0.(3) = 0.3(3) = 0.3(33) = 1/3 当然一个小数可以用好几种分数形式来表示,我们只感兴趣最简的分数形式(即分母最小),如: 0.3(33) = 1/3 = 3/9 因为任何一个数都可以转化为一个整数和一个纯小数之和,整数部分较为简单无需做额外处理,只要将纯小数部分转化为分数形式,整数部分的分数部分就很简单了。 现在给定一个正的纯小数(这个纯小数为有限小数或无限循环小数),请你以最简分数形式来返回这个纯小数。

 

Input

给定一个纯小数,若是无限循环小数,用括号标记循环节,输入小数表达不超过100个字符。

Output

输出:化为最简分数形式,分子在前,分母在后,中间空格连接。

 

Sample Input

0.3(33)

 

Sample Output

1 3

 

浮点数的分数表达

浮点数的分数表达
=============================

(注:long long 是提交系统所需,在VC6.0下需该为 __int64 相应的输入输出格式为 %I64d )
ps.主要是longlong 类型要特别处理 不能用pow()
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
using namespace std;
 
long long GCD(long long bigNum,long long sNum) //辗转相除返回除数
{
    if(bigNum < sNum)
        return GCD(sNum,bigNum);
    long long res;
    if(sNum==0)
        return bigNum;
    res = bigNum%sNum;
    while(res)
    {
        bigNum = sNum;
        sNum = res;
        res = bigNum%sNum;
    }
    return sNum;
}
int isNum(char str[])
{
    for(int i=2; i<strlen(str); i++)
    {
        if(str[i]>'9'||str[i]<'0')
            return false;
    }
    return true;
}
 
int findCh(char str[],char ch)
{
    for(int i=2; i<strlen(str); i++)
    {
        if(str[i]==ch)
        {
            return i;
        }
    }
    return 0;
}
 
int main()
{
    char num[128];
    scanf("%s",&num);
    /*if(!isNum(num)){
        printf("%s","请输入正确数据!!");
        return 0;
    }*/
    int len = strlen(num);
    long long num1=0;
    long long num2;
    if(findCh(num,'(')==0)
    {
        for(int i=2; i<len; i++)
        {
            num1=num1*10+num[i]-'0';
        }
 
        //printf("%ld\n",num1);
 
        num2=1;
        for(int i=2; i<len; i++)
        {
            num2 *= 10;
        }
        //printf("%ld\n",num2);
 
        long long gcd = GCD(num1,num2);
        num1 /=gcd;
        num2 /=gcd;
 
        printf("%lld %lld\n",num1,num2);
        // cout << num1 << endl;
    }
    else
    {
        int start =findCh(num,'(');
        int end =findCh(num,')');
        int n = start-2;
        int m = end - start - 1;
//printf("%d %d\n",m,n);
        for(int i=2; i<start; i++)
        {
            num1=num1*10+num[i]-'0';
        }
//printf("%ld\n",num1);
 
        num2=0;
        for(int i=start+1; i<len-1; i++)
        {
            num2=num2*10+num[i]-'0';
        }
//printf("%ld\n",num2);
 
        long long mp = 1;
        for(int i=0; i<m; i++)
        {
            mp *=10;
        }
        long long np = 1;
        for(int i=0; i<n; i++)
        {
            np *=10;
        }
 
        num1 = num1*(mp-1)+num2;
        num2 = (mp-1)*np;
 
 
 
        long long gcd = GCD(num1,num2);
        num1 /=gcd;
        num2 /=gcd;
        printf("%lld %lld\n",num1,num2);
    }
 
    return 0;
}

 

分享到:
评论

相关推荐

    11076浮点数的分数表达

    因此,在某些情况下,使用分数表示小数可以提供更精确的结果。 - **目标**:给定一个正的纯小数(可能是有限小数或无限循环小数),将其转换为最简分数形式。 - **应用场景**:数学计算、科学工程等领域,特别是需要...

    浮点数的分数表达

    计算机算法设计与分析实验:浮点数的分数表达,可运行源代码,c++

    精确表达浮点数(详细)

    ### 精确表达浮点数:从理论到实践 #### 浮点数的精确表达:为什么重要? 在计算机科学领域,浮点数是用于表示实数的一种数据类型,广泛应用于数学运算、科学计算和工程设计中。然而,由于计算机内部的二进制存储...

    [Java]精确表达浮点数

    如果你希望得到精确计算结果,最好是用分数形式来表示小数。有限小数或者无限循环小数都可以转化为分数。比如: 0.9=9/10 0.33(3)=1/3=3/9 给定一个有限小数或者无限循环小数,你能否以分母最小的分数形式返回这个...

    小数转分数

    浮点数的分数表达 在计算机中,用float或double来存储小数有时不能得到精确值,若要精确表达一个浮点数的计算结果, 最好用分数来表示小数,有限小数或无限循环小数都可以转化为分数,无限循环小数的循环节用括号...

    用平方根或分数表示小数

    有时候,为了更精确或者更方便地表达某些数值,我们可以使用平方根或分数的形式。本文将深入探讨如何用平方根或分数来表示小数,以及这种方法在历史和现代计算中的重要性。 首先,让我们从历史上著名的例子入手。...

    埃及分数问题,算法分析与设计

    在古代,埃及人善于使用这种表达方式来简化分数运算,因为这样的分数更容易进行加减计算。本主题主要探讨埃及分数问题的算法分析与设计,并以C语言作为实现工具。 1. **埃及分数的基本性质** - 不可约性:每个部分...

    易语言分数运算模块

    1. **分数运算**:模块支持基本的分数加、减、乘、除运算,这些操作符使得程序能够进行精确的分数计算,避免了浮点数运算中的精度问题。 2. **分数赋值**:允许将一个分数对象赋值给另一个,确保数据的准确传递。 ...

    2021年信息奥赛题库编程基础之算术表达式与顺序执行.doc

    5. 计算分数浮点数值:题目要求将两个整数表示的分数转换为浮点数,保留小数点后9位。这需要将分数转换为小数并进行精确输出。 6. 甲流疫情死亡率:计算死亡率涉及到比例运算,程序需要读取确诊数和死亡数,然后...

    Julia中文文档.pdf

    Julia的设计目标是同时具有类似于Python的易用性、类似于MATLAB的数学表达能力以及类似于C的运行速度。 2. 变量: 在Julia中,变量的命名需要遵循特定的规范。合法的变量名通常以字母或下划线开始,后面可以跟字母...

    七年级数学(上)期中考试题.docx

    15. 计算器的使用:使用计算器进行浮点数的运算,并要求结果精确到小数点后一位。 16. 代数式的计算:涉及乘除混合运算和幂运算。 17. 代数式的表达:要求用代数式表示给定的数学关系。 18. 代数式的求值:将给定...

    Excel中PERCENTRANK函数的使用.pdf

    它考虑了数据集中的所有数值,计算出指定数值相对于整个数据集的位置,并以百分比形式表达。例如,在评估学生考试成绩时,可以使用此函数找出特定分数在所有分数中所占的位置,如71分在6个分数中的排位是20%。 2. *...

    Exact arithmetic on continued fractions-开源

    连续分数是一种特殊的有理数或无理数表达形式,能提供精确的算术操作。 **描述详解:** 描述提到,“Ocaml模块通过将实数内部表示为(最终是无限的)连续分数来提供对实数的精确算术”。这说明该项目是用Ocaml编程...

Global site tag (gtag.js) - Google Analytics