UVa202
刚刚开始写的适合感觉是转换成字符然后开始遍历一遍,后面发现各种不行,就回去看了看题目,重新构思,写了好久还是WA,最后只能看下大神的操作(我太菜了).
先简单梳理下题目意思:首先给出两个数,然后这两个数相除,求相除的结果的“循环节”和“循环节长度”。
一开始没看清楚是循环节,以为是小数点后面的数,然后就WA了。
循环节的意思就是 无限循环小数的 周期的那一段
举个栗子:a/b=3.12345141592614159261415926 14…………分析一下,可以看出这一个无理数的循环周期,拆开看这就是这样的3.12345(1415926)(1415926)(1415926)…………这个数无限在1415926循环,1415926就是它的循环节
回到题目,如果是有限循环小数,那就它的循环节就是0,长度是1。
ok,下面给出代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define max 3050
int main()
{
int n, m;
int a[3050], b[3050], c[3050];
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
int len = 0;//小数总长度
int temp = n;//因为n等下要不断变化成新的被除数,所以先把原始的备份下
a[len++] = n / m;//a[]是用来保存每一位的商,a[0]用来保存n/m的整数部分
n = n % m;//n更新成为新的被除数,例如促使n=73,m=25,所以现在n=73%25=23—>n=23,就像我们手写的除法一样 /*b[]是用来判断每一个被除数是否被除过的,如果同一个被除数被除以两次,那就是无限循环小数了,也就是新的周期的开始
并且如果n==0的话,那就不是无限循环小数了,也就不用往下计算了*/
while (!b[n] && n)
{
b[n] = len;//标记被除数n是否被除过,并且记录了每一个被除数前面的长度
c[len] = n;//记录下循环节的起点,后面停止循环后当s[len]==n的时候,那对应的len就是循环节的起点
a[len++] = n * 10 / m;//上面说了,a[]是用来保存每一位的商,至于为什么乘10呢,这和我们手写除法的时候,下一位加个0是一个道理
n = n * 10 % m;//n更新为新的被除数
}
printf("%d/%d = %d.", temp, m, a[0]);//别忘记小数点了
for (int i = 1; i < len; i++) {
if (c[i] == n) { printf("("); }
printf("%d", a[i]);
}
if (n == 0)//如果n==0,也就是该数是有限循环小数
{
printf("(0");
}
printf(")\n");
/*这里用了个三目运算符,n是否等于0,如果等于0的话那%d就为1,否则就是len-b[n]
len是第二个循环节前面的小数的长度,b[n]是第一个循环节前面小数的长度,len-b[n]就是循环节的长度*/
printf(" %d = number of digits in repeating cycle", !n ? 1 : len - b[n]);
}
return 0;
}
UVa202的更多相关文章
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- uva202:循环小数(循环节+抽屉原理)
题意: 给出两个数n,m,0<=n,m<=3000,输出n/m的循环小数表示以及循环节长度. 思路: 设立一个r[]数组记录循环小数,u[]记录每次的count,用于标记,小数计算可用 r ...
- 循环小数 UVa202
输入整数a和b(0<=a<=3000,1<=b<=3000),输出a/b的循环小数表示以及循环节长度. 例如,a=5,b=43,小数表示为0.(1162790697674418 ...
- UVa202 Repeating Decimals
#include <stdio.h>#include <map>using namespace std; int main(){ int a, b, c, q, r, p ...
- ACM(数学问题)——UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。
主要思路: 通过模拟除法运算过程,来判断循环节结束的位置,不断将余数*10再对除数取余得到新的余数,并记录下来,知道出现的余数之前出现过,此时小数开始循环. 例如: 假设 -> a ...
- 算法习题---3.08循环小数(UVa202)
一:题目 输入整数a和b(<=a<=,<=b<=),输出a/b的循环小数表示以及循环节长度. 例如,a=,b=,小数表示为0.(),循环字节长度为21 当循环节长度超过50时, ...
- uva_answers
uva202: https://blog.csdn.net/lecholin/article/details/70163148 uva1589: https://blog.csdn.net/qq_42 ...
- Repeating Decimals UVA - 202---求循环部分
原题链接:https://vjudge.net/problem/UVA-202 题意:求一个数除以一个数商,如果有重复的数字(循环小数),输出,如果没有,输出前50位. 题解:这个题一开始考虑的是一个 ...
随机推荐
- [NCTF2019]Fake XML cookbook
0x00 知识点 XXE攻击 附上链接: https://xz.aliyun.com/t/6887 XXE(XML External Entity Injection)全称为XML外部实体注入 XML ...
- UVA - 1605 Building for UN (联合国大楼)
题意:一个联合国大楼每层都有数量相等大小相同的格子,将其分配给n个国家,使任意两个不同的国家都相邻(同层有公共边或相邻层的同一个格子). 分析:可以设计一个只有两层的大楼,第一层每个国家占一行,第二层 ...
- maven 依赖报错
1 maven项目,在Intellij 右侧 Maven projects - Lifecycle - clean , validate, compile, ….,右击clean,选中Run ‘pro ...
- storm on yarn(CDH5) 部署笔记
按照storm on yarn(Apache hadoop)部署好之后,然后修改HADOOP_HOME,hadoopenv.sh中的JAVA_HOME,以及storm-yarn-master中pom. ...
- bugku-Web 文件包含2
打开网页查看源代码,在最上面发现upload.php,于是我们就访问这个文件:http://123.206.31.85:49166/index.php?file=upload.php 发现是让我们上传 ...
- 实验吧web-中-忘记密码了
打开网页,查看源代码,好像发现了管理员邮箱而且还是用vim编辑的. 我们提交一下这个邮箱,虽然提交成功了,但好像并没什么用. 我们随便提交一个,会弹出 看来好像还有个step2呢,我们查看源代码(在这 ...
- Javascript里EQ、NE、GT、LT、GE、LE含义
EQ 就是 EQUAL等于 NE就是 NOT EQUAL不等于 GT 就是 GREATER THAN大于 LT 就是 LESS THAN小于 GE 就是 GREATER THAN OR EQUAL ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring目录结构和基础JAR包介绍
可以通过网址 http://repo.spring.io/simple/libs-release-local/org/springframework/spring/ 下载名称为 springframe ...
- js获取浏览器窗口大小
摘抄:https://blog.csdn.net/qq_27628085/article/details/81947478 常用: JS 获取浏览器窗口大小 // 获取窗口宽度 if ...
- CTF -攻防世界-web高手区-mfw
---恢复内容开始--- 昂,我很菜这是网上大神的教程. https://blog.csdn.net/silence1_/article/details/89741733 ---恢复内容结束---