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位. 题解:这个题一开始考虑的是一个 ...
随机推荐
- python outline
1.列表/数组/numpy/Pandas Python list 初始化技巧 (2018-12-27 11:54) python3 sort list (2019-05-23 14:52) P ...
- windows driver 获取本地时间
#define ArrayLength 260 void MyGetLocalTime() { LARGE_INTEGER li_system; LARGE_INTEGER li_Local; cha ...
- 实战 迁移学习 VGG19、ResNet50、InceptionV3 实践 猫狗大战 问题
实战 迁移学习 VGG19.ResNet50.InceptionV3 实践 猫狗大战 问题 参考博客:::https://blog.csdn.net/pengdali/article/detail ...
- List列表删除值为指定字段
需要处理一个场景,当值为某一个固定值或者为空的时候,删除列表中的这个值. ;i<list.size();i++){ if(list.get(i).equals("del")) ...
- 三十一、CI框架之使用验证码
一.CI的验证码功能用着很是舒服,需要在根目录下新建一个captcha的验证码文件夹用于存放生产的图片,代码如下: 二.浏览器效果如下: 总结:关于验证码生产函数,有很多参数可以设置,包括字体,验证码 ...
- element穿梭框el-transfer增加拖拽排序和shift多选checkbox功能
<template> <div class="demo"> <el-transfer v-model="value" filter ...
- salt教程1-理解saltstack
https://docs.saltstack.com/en/getstarted/system/index.html 1 基本介绍 通过观察它的实际运行,你可以大致理解salt如何工作.这意味着,在控 ...
- Servlet基础(java,idea)
IDEA的Tomcat配置Web的项目创建以及Servlet简单运行 登录测试 用到jdbc的知识 在Customer的DAO层实现类中实现检查用户登录方法 package impl; import ...
- 用ps画一个Gif的小房子(1)
效果如图: 制作方法: 1.新建200*200的画布:复制一块小房子图片 2.点击窗口-时间轴-勾选帧动画 3.如图所示(我这边是一帧对应一个图层) 4.新建图层-这边要新建24个图层,每个图层对应不 ...
- faster RCNN(keras版本)代码讲解(3)-训练流程详情
转载:https://blog.csdn.net/u011311291/article/details/81121519 https://blog.csdn.net/qq_34564612/artic ...