P1530 分数化小数 Fractions to Decimals

题意

题目描述

写一个程序,输入一个形如\(N/D\)的分数(\(N\)是分子,\(D\)是分母),输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。

例如,\(1/3=0.33333333\)写成\(0.(3)\),\(41/333=0.123123123...\)写成\(0.(123)\),用\(xxx.0\)等表示整数。典型的转化例子:

1/3 = 0.(3)
22/5 = 4.4
1/7 = 0.(142857)
2/2 = 1.0
3/8 = 0.375
45/56 = 0.803(571428)
PROGRAM NAME fracdec

输入输出格式

输入格式:

单独的一行包括被空格分开的\(N\)和\(D(1 \leq N,D \leq 100000)\)。

输出格式:

按照上面规则计算出的小数表达式.如果结果长度大于\(76\),每行输出\(76\)个字符.

输入输出样例

输入样例:

45 56

输出样例:

0.803(571428)

说明

USACO 2.4

思路

来,\(solo\)!P1530。 --alecli & Mercury
来咧。 --Uranus
换题了换题了。 --alecli & Mercury & Uranus

昨天晚上的\(solo\)水题,但是巨佬们都不做了,只有我写了\(qwq\)。

实际上思路是很简单的,首先处理小数点左边的数字,直接取\(\lfloor n/d \rfloor\)就好了。然后我们用竖式除法的方式来模拟处理循环节,对于每一位上的运算,假设当前算出来结果是\(a\),余数为\(b\),我们就查找前面的运算过程中有没有结果是\(a\)且余数为\(b\)的,如果有,循环节就找到了。当然我们还要处理整除的情况,这就只需要判断\(b=0\)是否为真。

具体来说我们可以这么写:

while(n!=0)//循环利用n来做b
{n*=10;//计算下一位tmp=n/d;//这一位上的计算结果an-=tmp*d;//余数bbool found=false;//打标记看能不能找到循环节for(int i=0;i<G[tmp].size();i++)//G是一个vector,里面储存的是pair<int,int>,first储存余数,second储存出现的位置if(G[tmp][i].first==n)//找到了{found=true;//修改标记int now=G[tmp][i].second;//找到位置string re;//处理新字符串(之前的运算结果都储存在字符串ans中)for(int j=0;j<now;j++) re+=ans[j];//处理循环节之前的re+='(';//循环节开始for(int j=now;j<ans.length();j++) re+=ans[j];//处理循环节内部的re+=')';//循环节结束ans=re;//更新答案break;//溜了溜了}if(found) break;//找到了,溜了溜了ans+=(tmp+'0');//更新答案G[tmp].push_back(make_pair(n,ans.length()-1));//更新vector
}

再处理好一些细节,就能\(AC\)了。

AC代码

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
int n,d;
vector<PII>G[10];
string ans;
int read()
{int re=0;char ch=getchar();while(!isdigit(ch)) ch=getchar();while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();return re;
}
string to_str(int x)
{if(!x) return "";string re=to_str(x/10);re+=(x%10+'0');return re;
}
int main()
{cin>>n>>d;int tmp=n/d;n-=tmp*d;ans+=to_str(tmp);if(!ans.length()) ans+='0';ans+='.';while(n!=0){n*=10;tmp=n/d;n-=tmp*d;bool found=false;for(int i=0;i<G[tmp].size();i++)if(G[tmp][i].first==n){found=true;int now=G[tmp][i].second;string re;for(int j=0;j<now;j++) re+=ans[j];re+='(';for(int j=now;j<ans.length();j++) re+=ans[j];re+=')';ans=re;break;}if(found) break;ans+=(tmp+'0');G[tmp].push_back(make_pair(n,ans.length()-1));}if(ans[ans.length()-1]=='.') ans+='0';for(int i=0;i<ans.length();i++){putchar(ans[i]);if(i%76==75) puts("");}return 0;
}

转载于:https://www.cnblogs.com/coder-Uranus/p/9758296.html

Luogu P1530 分数化小数 Fractions to Decimals(模拟)相关推荐

  1. 分数化小数 Fractions to Decimals

    https://www.luogu.org/problemnew/show/P1530 题解:模拟除法 /* *@Author: STZG *@Language: C++ */ #include &l ...

  2. usaco ★Fractions to Decimals 分数化小数

    ★Fractions to Decimals 分数化小数 写一个程序,输入一个形如 N/D 的分数(N 是分子,D 是分母),输出它的小数形式. 如果小数有循环节的话,把循环节放在一对圆括号中.例如, ...

  3. 1439: 2.4.5 Fractions to Decimals 分数化小数

    1439: 2.4.5 Fractions to Decimals 分数化小数 时间限制: 1 Sec  内存限制: 64 MB 提交: 194  解决: 13 题目描述 写一个程序,输入一个形如N/ ...

  4. 分数化小数(指定精度)

    分数化小数(指定精度) #include <stdio.h> #include <iostream> #include <iomanip> using namesp ...

  5. 分数化成有限小数的方法_分数化小数的方法|小数化分数题目

    [www.520z-2.com - 话题作文] 小数由整数部分.小数部分和小数点组成.当测量物体时往往会得到的不是整数的数,古人就发明了小数来补充整数 小数是十进制分数的一种特殊表现形式.下面是小学生 ...

  6. C++——分数化小数

     File Name:T023.cpp 分数化小数 Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 3592, Total Submis ...

  7. 求分数循环节(分数化小数)的算法

    问题: 给定两个数a.b,找出a/b的循环节,并按照指定格式输出.比如a=1.b=3,则输出0.(3),即用括号包含循环节. 解法: USCAO 2.4.5中的题 Fractions to Decim ...

  8. java分数变小数的函数_分数化小数

    题目 求 a / b 的小数表现形式.如果 a 可以整除 b 则不需要小数点. 如果是有限小数,则可以直接输出. 如果是无限循环小数,则需要把小数循环的部分用 "()" 括起来. ...

  9. 分数化小数计算机在线,循环小数化分数计算器

    一.纯循环小数化分数 从小数点后面第一位就循环的小数叫做纯循环小数.怎样把它化为分数呢?看下面例题. 把纯循环小数化分数: 纯循环小数的小数部分可以化成分数,这个分数的分子是一个循环节表示的数,分母各 ...

  10. 分数化小数(模拟除法操作)

    题目:输入a, b, c,输出a/b的小树形式,精确到小数点后c位.a,b <= 1e6, c <= 100; 输出包含多组数据,结束标记为a = b = c = 0. 样例输入:1   ...

最新文章

  1. Markdown快速上手
  2. matlab-向量的基本运算
  3. Linux内核学习资料
  4. 066_xhtml简介
  5. 电力系统分析课设短路电流计算simulink仿真
  6. iOS开发常用的资源和资料
  7. 移植 uC/OS-III 到 STM32
  8. 免费设计图标的网站;免费设计的网站;免费设计的网站;
  9. VRRP在生产环境中的应用
  10. Oracle根据月份获取其是哪个季度
  11. 计算机组装维护理论知识大全,计算机组装与维护知识汇总.docx
  12. 王垠的40行代码,究竟diao在哪里
  13. 数据库的redo undo 思考总结
  14. Redis数据结构之——sds
  15. 23种设计模式归纳总结——结构型
  16. 【无标题】java学习第二天
  17. 零界之痕服务器维护,零界之痕进不去怎么办 游戏故障解决方法
  18. mysql error 1_mysql 启动错误(InnoDB: Operating system error number 1
  19. Layui的eleTree树式选择器使用
  20. boosting算法调参

热门文章

  1. oracle用户 expire,Oracle 账号 EXPIRED(GRACE) 意义-拾亿
  2. iPhone开发Swift基础08 加密与安全
  3. html超链接地址隐藏,如何在Excel中隐藏超链接地址?
  4. 如何写项目方案--从资料准备到书写技巧
  5. 秋季最养胃饮食排行榜单
  6. 针对Sql Server中进行查询操作时提示“对象名无效”
  7. 物联网大赛“千里挑一”,华为、上海交大共铸人才引擎
  8. JS测试显示屏分辨率以及屏幕尺寸
  9. 小白:测试的逻辑思维
  10. GIT统计代码量及IDEA Statistic统计解析