【描述】
写一个程序,输入一个形如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
【格式】
INPUT FORMAT
单独的一行包括被空格分开的N和D(1 <= N,D <= 100000)。
OUTPUT FORMAT
按照上面规则计算出的小数表达式.如果结果长度大于76,每行输出76个字符.
【分析】
直接模拟除法就行了(长除法),不得不说有一点麻烦。
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
const int maxn=;
using namespace std;
int point=,vis[maxn+];//vis同时记录a在ans中的位置
int ans[maxn],zf=;//zf是字符输出统计
void cnt();
int main()
{
int a,b,i;
//文件操作
freopen("fracdec.in","r",stdin);
freopen("fracdec.out","w",stdout);
memset(vis,,sizeof(vis));//初始化 scanf("%d%d",&a,&b);
if (a%b==) {printf("%.1lf",(double)a/b);return ;}//可以直接整除 printf("%d.",a/b);cnt();
int temp=a/b;if (temp==) cnt();
while (temp!=) {cnt();temp/=;}//顺便统计字符
//printf(" %d\n",zf);
a=a%b;
vis[a]=;
ans[point++]=a;
for (i=;;i++)
{
a=(a*)%b;
ans[point++]=a;
if (vis[a]) break;//出现重复值
vis[a]=i;
}point--; for (i=;i<vis[ans[point]];i++) {cnt();printf("%d",(ans[i]*)/b);}//输出重复值之前的部分
if ((ans[vis[ans[point]]]*)/b== && vis[ans[point]]==point-) return ;//重复值为0
cnt();printf("(");
for (i=vis[ans[point]];i<point;i++) {cnt();printf("%d",(ans[i]*)/b);}
cnt();printf(")");
//printf("\n%d",zf);
return ;
}
void cnt()
{
//已经输出了zf个字符
if (zf==) {printf("\n");zf=;}
zf++;
}
【USACO 2.4.5】分数化小数的更多相关文章
-
洛谷P1530 分数化小数 Fractions to Decimals
P1530 分数化小数 Fractions to Decimals 103通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目 ...
-
Luogu P1530 分数化小数 Fractions to Decimals(模拟)
P1530 分数化小数 Fractions to Decimals 题意 题目描述 写一个程序,输入一个形如\(N/D\)的分数(\(N\)是分子,\(D\)是分母),输出它的小数形式.如果小数有循环 ...
-
[C++]2-5 分数化小数
/* 分数化小数 输入正整数a,b,c,输出a/b的小数形式.精确到小数点后C位.a,b<=10^6,c<=10^6. 输入包含多组数据,结束标记为a=b=c=0 样例输入: 1 6 4 ...
-
分数化小数(decimal)
分数化小数 ①我的程序 #include<iostream>using namespace std;int main(void){ int a,b,c,kase=0; while(scan ...
-
YTU 1439: 2.4.5 Fractions to Decimals 分数化小数
1439: 2.4.5 Fractions to Decimals 分数化小数 时间限制: 1 Sec 内存限制: 64 MB 提交: 194 解决: 13 题目描述 写一个程序,输入一个形如N/ ...
-
【u237】分数化小数
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 写一个程序,输入一个形如N/D的分数(N是分子,D是分母),输出它的小数形式.如果小数有循环节的话,把 ...
-
分数化循环小数C++实现
引言 前一阵做了一个有理数四则混合运算的程序(详见:用C++实现的有理数(分数)四则混合运算计算器),以分数形式呈现运算结果.这次添加以循环小数形式呈现运算结果的功能.例如: Please input ...
-
Leetcode 166.分数到小数
分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入: num ...
-
Java实现 LeetCode 166 分数到小数
166. 分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入 ...
随机推荐
-
《2016ThoughtWorks技术雷达峰会----雷达新趋势》
雷达新趋势 徐昊,ThoughtWorks中国区CTO 1.Open Source open source 已经从一个简简单单的软件代码组织方式变成一种文化,一种运动.当谈到Open Sour ...
-
平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9611887 作者:七十一雾央 新浪微博:http:/ ...
-
IE的layout属性详解
http://www.cnblogs.com/yuzhongwusan/archive/2012/03/09/2387052.html 很多在谷歌浏览器(chrome).火狐浏览器(Fire Fox) ...
-
C++ Scripting
http://www.quepublishing.com/articles/article.aspx?p=26069
-
解决ADT升级报错
方法一: 将https://dl-ssl.google.com/android/eclipse/ 改成 http://dl-ssl.google.com/android/eclipse/: 方法二: ...
-
win7(32/64)+apache2.4+php5.5+mysql5.6 环境搭建配置
引用自:http://blog.csdn.net/z_cf1985/article/details/22454749 环境:win7 32.(64位的同理,下载相关软件必须是对应的64位版本) ...
-
html中opacity的使用
今天做项目要用到一个层背景透明,层上的内容不透明的效果 结果网上找了半天,没一个靠谱的, 最后倒是被一句话点醒了:纸烧了,纸上面的字也会没了 所以,要设2层遮罩层,看代码: .dialog_1//内容 ...
-
RDLC系列(一)ASP.NET RDLC 报表自定义数据源
最近一段时间开发ERP系统中要用到不少报表打印,在网上找了一圈发现想些好用的报表控件大部分要收费,一些面免费要么不好用要么IE8不兼容,最后还是用了微软自带的RDLC报表,把自己遇到的坑和技巧整理分享 ...
-
ASP.NET Core部署到CentOS7,使用Nginx代理
ASP.NET Core 的运行环境由新开发的 Kestrel Server 负责,IIS 退回到 HTTP 的侦听器的角色,微软也特别为了这个需求开发了 IIS Platform Handler,以 ...
-
201521123066 《Java程序设计》第十周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 有关异常的知识点: 一段代码可能生成多种类型的异常,子类异常必须放在父类异常前面,否则会出现编译错误: 可以 ...