小数(包括循环小数)转化为分数方法,nyoj 1199

本文深入解析小数变分数的转换方法,包括纯循环小数和混循环小数的转换过程,并提供了相应的代码实现。通过实例演示,帮助读者理解和掌握这一数学技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1199

又是一个涨知识的题目,小数变分数很好的知识。

一下为百度内容,写的很好贴过来。加上很自己的理解。


对于纯循环小数,转换方法是:循环节做分子;分母全是9,9的个数为循环节长度。。再约分即可
例:0.1111111...=1/9, 我自己的理解是,10%9=1, 10%9=10,......很有可能很多人都不知道我在说什么。。。。自己理解下就ok了。
0.123 123 123....=123/999=41/333
0.35 35 35..=35/99

对于混循环小数,转换方法是:分子为两数(非循环部分+循环部分,和循环部分)之差-----被减数:小数点后第一位的数直到第一个循环节结束,这几个数字构成的数作为被减数;减数:未参与循环的小数部分,分母由9和0组成,9的个数为循环节长度,0的个数为未循环部分长度。。再约分即可

例:0.1 23 23 23 23....=(123-1)/990=122/990=61/495
0.73 865 865 865...=(73865-73)/99900=73792/99900=18448/24975
0.32 11111111...=(321-32)/900=289/900


很好很强大的一道题。。

加上自己的code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
using namespace std;
typedef long long INT;
const INT _10[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};
const INT _9[] = {1, 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999};

INT gcd(INT a, INT b)
{
    if(b == 0) return a;
    return gcd(b, a % b);
}
int main()
{
//    freopen("1.txt", "r", stdin);
    INT T;
    cin >> T;
    while(T --){
        INT n, m, x, y;
        cin >> n >> m >> x >> y;
        INT fenz = x * _10[m] + y - x;
        INT fenm = _9[m] * _10[n];
        INT fen = gcd(fenz, fenm);
        printf("%lld / %lld\n", fenz / fen, fenm / fen);
    }
    return 0;
}

待续未完。。。。。后续补充分数变小数(可能是循环的小数)的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值