栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

试题 历届真题 循环小数【第十一届】【决赛】【研究生组】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

试题 历届真题 循环小数【第十一届】【决赛】【研究生组】

试题 历届真题 循环小数【第十一届】【决赛】【研究生组】

资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

思路
1.0.333之类(只有循环体)
0.333的循环体的个数为1(即是3),所以分子/分母为3/9=1/3
0.4242 循环体个数为2(42),分子/分母为 42/99…

2.0.1233443344之类(循环体前还有数字的)
0.1233443344=0.12+0.0033443344=12/100+3344/9999/100
通分之后(12 * 9999 + 3344)/(9999 * 100),再找最大公约数,约分之后就得到结果

代码:

#include 
#include
using namespace std;
int getnumb(int a,int b)//得到最大公约数的函数
{
    return b==0?a:getnumb(b,a%b);
}
int main()
{
    int p,q,num;
    cin>>p>>q>>num;
    int x,y;//分子分母
    int t2=pow(10,q-p+1);//循环前数对应的10的q-p+1次方
    int t1=pow(10,p-1);//循环的数  对应的10的p-1次方
    int numb1=num/t2;//循环前部分的数
    int numb2=num%t2;//循环部分的数
    x=numb1*(t2-1)+numb2;//通分后的分子
    y=(t2-1)*t1;//分母
    int numb=getnumb(x,y);//得到最大公约数,接下来化简x,y
    x/=numb;
    y/=numb;
    cout< 

202205291524日

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号