Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

写一个程序,输入一个形如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

22/5=4.4

2/2=1.0

3/8=0.375

45/46=0.803(571428)

【输入格式】

单独的一行包括被空格分开的N和D,1<=N,D<=100000。

【输出格式】

输出一行小数的表示方法上面已经说得很明白了。

【数据规模】

Sample Input1

45 56

Sample Output1

0.803(571428)

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u237

【题解】



一下内容摘抄自网络

/*
22 / 7 = 3.142857142857142857...
如果我们细心观察一下22/7的演算过程,我们便会明白为何这分数必然是循环的。在计算22/7的第一步骤中,我们先得商3和余数1。接着我们把余数1倍大为10,然后计算10/7,得商1和余数3。接着我们把余数3倍大为30 ,然后计算30/7,得商4和余数2。接着我们又把余数2倍大为20,然后计算20/7......如此类推。因此,在计算 22/7时,我们实际上是在不断做10/7或20/7或30/7...。可是,由于任何数除以7所得的余数只有7种可能(即0、 1、2、3、4、5和6)(注2),这样下去必然会重复出现之前的计算。当出现重复时,接着下来的计算便会跟之前做过的计算一模一样,因而出现循环小数的情况。例如,在22/7的运算中,当计算至小数点后第6位时,得商7 和余数1,接着我们把余数1倍大为10,然后计算10/7,但是此一计算在之前已做过,接下来的计算结果必然是 142857,因此22/7必然是不断重复出现142857这组数字的循环小数。
*/

所以我们进行d(分子)次模拟手算除法的过程就肯定能够找到余数的循环节;(不能直接在结果里找循环节);

然后输出两个循环节之间的数就好;

要注意输出1/2=0.5的情况;控制输出下就好;(能整除就直接输出.0吧)



【完整代码】

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pp push_back
#define fi first
#define se second using namespace std; typedef pair<int,int> pii;
typedef pair<LL,LL> pll; void rel(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} void rei(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} const int MAXN = 1e5+10;
const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
const double pi = acos(-1.0); LL n,d;
int bo[MAXN];
LL a[MAXN]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> n >> d;
memset(bo,0,sizeof(bo));
printf("%d.",n/d);
if (n%d==0)
puts("0\n");
else
{
LL now = n%d;
int l = 1,r = 1;
bool find = false;
rep1(i,1,d)
{
r = i;
bo[now] = i;
now = now*10;
a[i] = now/d;
now %= d;
if (bo[now])
{
r = i;
l = bo[now];
find = true;
break;
}
}
rep1(i,1,l-1)
cout << a[i];
if (now!=0) cout << "(";
if (now!=0)
rep1(i,l,r)
cout << a[i];
if (now!=0) cout << ")";
}
return 0;
}

【u237】分数化小数的更多相关文章

  1. 洛谷P1530 分数化小数 Fractions to Decimals

    P1530 分数化小数 Fractions to Decimals 103通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目 ...

  2. [C++]2-5 分数化小数

    /* 分数化小数 输入正整数a,b,c,输出a/b的小数形式.精确到小数点后C位.a,b<=10^6,c<=10^6. 输入包含多组数据,结束标记为a=b=c=0 样例输入: 1 6 4 ...

  3. 分数化小数(decimal)

    分数化小数 ①我的程序 #include<iostream>using namespace std;int main(void){ int a,b,c,kase=0; while(scan ...

  4. YTU 1439: 2.4.5 Fractions to Decimals 分数化小数

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

  5. Luogu P1530 分数化小数 Fractions to Decimals(模拟)

    P1530 分数化小数 Fractions to Decimals 题意 题目描述 写一个程序,输入一个形如\(N/D\)的分数(\(N\)是分子,\(D\)是分母),输出它的小数形式.如果小数有循环 ...

  6. 【USACO 2.4.5】分数化小数

    [描述] 写一个程序,输入一个形如N/D的分数(N是分子,D是分母),输出它的小数形式. 如果小数有循环节的话,把循环节放在一对圆括号中. 例如, 1/3 =0.33333333 写成0.(3), 4 ...

  7. 分数化循环小数C++实现

    引言 前一阵做了一个有理数四则混合运算的程序(详见:用C++实现的有理数(分数)四则混合运算计算器),以分数形式呈现运算结果.这次添加以循环小数形式呈现运算结果的功能.例如: Please input ...

  8. Leetcode 166.分数到小数

    分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入: num ...

  9. Java实现 LeetCode 166 分数到小数

    166. 分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入 ...

随机推荐

  1. POJ——T 2752 Seek the Name, Seek the Fame

    http://poj.org/problem?id=2752 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20418   ...

  2. DOM和SAX是应用中操纵XML文档的差别

    查看原文:http://www.ibloger.net/article/205.html DOM和SAX是应用中操纵XML文档的两种主要API.它们分别解释例如以下:          DOM.即Do ...

  3. 构建自己的AngularJS - 作用域和Digest(一)

    作用域 第一章 作用域和Digest(一) Angular作用域是简单javascript对象,因此你能够像对其它对象一样加入属性.然而,他们也有一些额外的功能:用于观測数据结构的变化.这样的观察能力 ...

  4. launcher- 第三方应用图标替换

    有时候我们感觉第三方应用的icon不美观,或者跟我们主题风格不一致,这时候我们希望换成我们想要的icon,那我们可以这么做(以更换QQ应用icon为例): 1.首先我们当然要根据自己的需要做一张替换i ...

  5. node.js是什么

    node.js是什么 一.总结 一句话总结:Node.js 就是运行在服务端的 JavaScript. 二.node.js是什么 简单的说 Node.js 就是运行在服务端的 JavaScript. ...

  6. IAR for STM8介绍、下载、安装与注册--转

    Ⅰ.写在前面 本文讲述的内容是IAR for STM8的介绍.下载.安装与注册,其安装.注册过程和IAR for ARM类似,如果需要了解IAR for ARM相关的文章,可以到我博客,或微信公众号查 ...

  7. WebService三大基本元素 SOAP WSDL UDDI

    转自:https://blog.csdn.net/hhooong/article/details/51763128 1.SOAP 即 Simple Object AccessProtocol 也就是简 ...

  8. 1.19 Python基础知识 - 软件目录开发规范及不同模块之间的调用

    一个软件项目的开发,除了需要很厉害的开发能力,同时在软件开发项目时,也需要对项目结构有良好的组织能力,将功能进行拆分,不同的功能放在不同的目录或文件中,方便日后的维护,升级等操作.比如核心代码的目录, ...

  9. spring基础内容

      关注和收藏在这里   深入理解Spring框架的作用 纵览Spring , 读者会发现Spring 可以做非常多的事情. 但归根结底, 支撑Spring的仅仅是少许的基本理念, 所有的理念都可以追 ...

  10. PYTHON学习第五天课后总结:

    今日重点: 数字类型 字符串类型 列表类型 元组类型 1,数字类型    数字类型为不可变类型   也只能将纯数字类型的字符串转换成int包括: 整型: int()     int() 为内置函数,可 ...