把 分数化为循环小数 和 把循环小数化为分数 的方法

今天学习了把分数化为循环小数,以下代码实现的功能是:输入m/n,假设m能被n整除,则直接输出商;否则,输出商以后再输出循环节。

#include<cstdio>
#include<cstring>
const int MAXN = 100005;
int a[MAXN], vis[MAXN];
int main()
{
    int n, t, i, m;
    scanf("%d",&t);
    while(t--)
    {
        memset(vis, 0, sizeof(vis));
        scanf("%d/%d",&m,&n);
        if(m > 0 && n < 0)
        {
            printf("-");
            n = -n;
        }
        else if(m < 0 && n > 0)
        {
            printf("-");
            m = -m;
        }
        if(m % n == 0)
        {
            printf("%d\n",m/n);
            continue;
        }
        else
        {
            if(m > n)
            {
                printf("%d.",m/n);
                m = m % n;
            }
            else
                printf("0.");
        }
        int s = m, num = 0;
        vis[s] = 1;
        while(1)
        {
            s *= 10;
            a[num++] = s / n;
            s %= n;
            if(vis[s] || s == 0) break;  //余数再次出现或者余数为0(即能够整除)
            vis[s] = 1;
        }
        for(i = 0; i < num; i++)
            printf("%d", a[i]);
        printf("\n");
    }
    return 0;
}

把循环小数化为分数的方法:对于纯循环小数(从小数点后第1位開始循环)x。如果循环节为R。它包含l个数字,则有10^l*x - x = R,因此x = R/(10^l - 1)。

比如,若x = 0.123 123 123…,则R = 123, l = 3, 因此x = 123/999 = 41/333。

时间: 2024-10-27 08:39:23

把 分数化为循环小数 和 把循环小数化为分数 的方法的相关文章

创建一个Fraction类(分数)实现分数的加减乘除,比较大小、约分等方法。要求:为类添加属性

//在.h文件里 {     NSInteger _numerator;     //分子     NSInteger _denominator;   //分母     }   //属性 @property (nonatomic) NSInteger numerator; @property (nonatomic) NSInteger denominator; //初始化   - (id)initwithNumerator:(NSInteger)numerator denominator:(NS

【sql: 联系题26 ,27】查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩,查询课程名称为「数学」,且分数低于 60 的学生姓名和分数

题目:26:查询平均成绩大于等于 85 的所有学生的学号.姓名和平均成绩 分析:这个应该是根据student 进行分组 group by 再根据 having >= 85 进行过滤,然后在关联student 信息表,拿到学生的基本信息 SELECT student.id, student.stdentname,AVG(student_score.score) AS a FROM student_score, studentWHERE student.id = student_score.stud

JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。

JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对象.要添加System.Web.Extensions.dll的引用.该类位于System.Web.Script.Serialization命名空间下. 一.属性 MaxJsonLength 获取或设置 JavaScriptSerializer 类接受的 JSON 字符串的最大长度. Recursio

JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对象.要添加System.Web.Extensions.dll的引用.该类位于System.Web.Script.Serialization命名空间下. 一.属性 MaxJsonLength 获取或设置 JavaScriptSerializer 类接受的 JSON 字符串的最大长度. Recursio

C# 类序列化为文件,文件反序列化为类(二进制)

(1)添加引用 (2)在将要序列化的类中引用 using ProtoBuf; 并且在类之前添加字段 [Serializable] 变量之前添加字段 ProtoMember 效果如下所示: 1 using System; 2 using ProtoBuf; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespac

bean转化为xml 与 xml转化为bean

1.bean to xml: public static void main(String[] args) { List<JydInfo> list = new ArrayList<JydInfo>(); String auth_code = "hunan_auth_code"; JydInfo clws1 = new JydInfo("100101","黑猪","100","2000&quo

无限循环小数化分数、

循环小数分为混循环小数.纯循环小数两大类. 混循环小数可以*10^n(n为小数点后非循环位数),所以循环小数化为分数都可以最终通过纯循环小数来转化. 等比数列法编辑 无限循环小数,先找其循环节(即循环的那几位数字),然后将其展开为一等比数列.求出前n项和.取极限.化简. 例如:0.333333…… 循环节为3 则0.33333.....=3*10^(-1)+3*10^(-2)+……+3^10(-n)+…… 前n项和为:0.3(1-(0.1)^(n))/(1-0.1) 当n趋向无穷时(0.1)^(

如何把一个无限循环小数转换成一个分数(算法)

循环小数如何化分数众所周知,有限小数是十进分数的另一种表现形式,因此,任何一个有限小数都可以直接写成十分之几.百分之几.千分之几……的数.那么无限小数能否化成分数? 首先我们要明确,无限小数可按照小数部分是否循环分成两类:无限循环小数和无限不循环小数.无限不循环小数不能化分数,这在中学将会得到详尽的解释:无限循环小数是可以化成分数的.那么,无限循环小数又是如何化分数的呢?由于它的小数部分位数是无限的,显然不可能写成十分之几.百分之几.千分之几……的数.其实,循环小数化分数难就难在无限的小数位数.

实验11:Problem D: 分数类的模板数组类

在默认构造函数里面,分母的默认值不能为0!! Home Web Board ProblemSet Standing Status Statistics Problem D: 分数类的模板数组类 Problem D: 分数类的模板数组类 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 509  Solved: 350[Submit][Status][Web Board] Description 封装一个模板数组类Array,支持一下操作: 1. 构造函