循环小数

循环小数

冷暖自知 提交于 2020-02-26 21:52:19
poj1930 # include <stdio.h> # include <string.h> # include <iostream> # include <math.h> # include <algorithm> using namespace std ; typedef unsigned long long ll ; # define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); const ll MAXN = 45000 ; const int MOD = 10000000 ; ll gcd ( ll a , ll b ) { if ( b == 0 ) return a ; return gcd ( b , a % b ) ; } int main ( ) { char str [ 100 ] ; int num , k , all , a , b , i , j , mina , minb , l ; while ( cin >> str && strcmp ( str , "0" ) ) { mina = minb = 1000000000 ; for ( i = 2 , all = 0 , l = 0 ; str [ i ] != '.' ; i ++ ) { all = all *

python基础一 day15 内置函数

两盒软妹~` 提交于 2020-02-05 19:39:25
'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖; '\n' 换行,换到当前位置的下一行,而不会回到行首; # print()# input()# len()# type()# open()# tuple()# list()# int()# bool()# set()# dir()# id()# str()# print(locals()) #返回本地作用域中的所有名字# print(globals()) #返回全局作用域中的所有名字# global 变量# nonlocal 变量#迭代器.__next__()# next(迭代器)# 迭代器 = iter(可迭代的)# 迭代器 = 可迭代的.__iter__()# range(10)# range(1,11)# print('__next__' in dir(range(1,11,2)))# dir 查看一个变量拥有的方法# print(dir([]))# print(dir(1))# help# help(str)# 变量# print(callable(print))# a = 1# print(callable(a))# print(callable(globals))# def func():pass# print(callable(func))import time# t

hdu1717(循环小数化为分数,分数x=b-a(pow(10,总位数)-pow(10,小数点到括号之间的位数)) )

喜夏-厌秋 提交于 2020-02-04 17:36:46
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1717 题目大意: 思路: 细说这道题可以分成三种,1.只有普通小数不含循环小数,2.只有循环小数,3.混合小数(即两者都有的)。 第一种普通小数:就是将其记录下来然后分子分母化简。 第二种:包含循环小数,将上面的2和3包含在一起了。 //如:0.12(56) //设置x=0.12(56) //令a=0.12(56)*100=12.(56)--------(1) //令b=0.12(56) 10000=1256.(56)----(2) //将(2)-(1)得b-a=x (10000-100) //得x=b-a/(10000-100) //或者是单独为循环小数的也是如此 //如:0.(89) //设置x=0.(89) //令a=0.(89)*1=0.(89)--------(1) //令b=0.(89) 100=89.(89)----(2) //将(2)-(1)得b-a=x (100-1) //得x=b-a/(100-1) //故可得通式:x=(b-a)/(pow(10,总位数)-pow(10,小数点到括号之间的位数)) ac代码: # include <stdio.h> # include <math.h> int gcd ( int a , int b ) { return b ==

循环小数

徘徊边缘 提交于 2020-02-04 15:09:52
循环小数: 文章目录 循环小数: 题目描述: Input: Output: 思路分析: 代码: 题目描述: 假设输入a与b,当a=5,b=43,a/b得到无限循环小数,0.116279069767441860465,5后面将会循环下去,他要求你计算循环节的长度(就是不循环的长度),并且还要你输出循环节的数字、 Input: 5 43. Output: 0.(116279069767441860465) 21. 思路分析: 这道题可以用数组去记录a/b所得的商,但是如何去找循环节的位置呢,那么可以想到当(a%b与a/b)与下一次的(a%b与a/b)相等说明找到了循环节,在用一个数组记录循环节的位置就行了。 代码: # include <stdio.h> int main ( ) { int e [ 3010 ] , e1 [ 3010 ] , e2 [ 3010 ] ; //e记录商,e1记录循环节出现的位置,e2记录余数 int b , c , d = 0 , h = 0 ; scanf ( "%d %d" , & b , & c ) ; e [ d ++ ] = b / c ; b = b % c ; while ( ! e2 [ b ] && b ) //判断如果该次余数与下次运算的余数相等,说明将会无限循环下去 //因为他们除数相等,当被除数(余数)相等时

求循环小数的表示以及循环节长度

女生的网名这么多〃 提交于 2020-01-25 00:57:17
题意: 求1/n,如果有循环结,用括号把循环结括起来 (若求两个整数的,把a变成输入即可) # include <iostream> # include <algorithm> # include <stdio.h> # include <string> # include <string.h> # include <map> # include <math.h> # include <vector> # include <set> # include <queue> # include <map> # include <deque> # include <stack> # include <iostream> typedef long long ll ; using namespace std ; const int N = 1e4 + 7 ; using namespace std ; map < int , int > m ; int yu [ N ] , s [ N ] , k [ N ] ; int main ( ) { int a , n ; while ( scanf ( "%d" , & n ) != - 1 ) { if ( n == 1 ) { printf ( "1.0\n" ) ; continue ; } memset ( yu , 0 , sizeof

循环小数与无限不循环小数

大城市里の小女人 提交于 2020-01-11 16:32:57
从键盘输入分子b和分母a,判断该分数(真分数)是否是无限循环小数,并给出循环开始出现的位数。验证如下结论是否正确: (对于分数b/a,小数点至多a位, 或a位之内开始出现无限循环。) 例如: 3/8 = 0.375 //小数点不超过7位(有限小数) 1/3 = 0.333333...//从1位开始出现无限循环 1/7 = 0.142857 142857 142857 //6位开始(7位内)出现循环序列:142857 6/7 = 0.857142 857142 857142 //6位开始(7位内)出现循环序列:857142 (试试神奇的分数1/49和100/9801,100/9899) 提示: 假设分数是3/8=0.375 小数第1位上的数字是30/8的商,就是表达式30/8的值:3 30%8(求余)的值是6,那么 小数第2位上的数字是60/8的值:7 60%8(求余)的值是4,那么,小数第3位上的数字是40/8的值:5 再写的过程中遇到很多问题,逐一解决,所以在代码中可能有些复杂不够精简,限于作者水平。。。。。 此题必然还有更为简便的方案,下次想出来再改; 首先利用题目所给方法求出其小数部分,然后我的想法是取出 2a 个小数点后的数字逐一判断; 但是呢,问题出现在数字重复可能不是循环的,因为他可能就连续出现几个一样的数字; 这个问题困扰了很久,最后解决的方案不太理想,但也能解决;

无限循环小数化分数

◇◆丶佛笑我妖孽 提交于 2019-11-29 00:52:02
结论 先举个例子:设小数x=0. 316459 6657 66576657...下划线部分为小数后不循环部分,记a=316459,位数m=6,加深部分为小数后循环部分,记b=6657,位数n=4.则分数为 (a*10 n +b-a)/10 m (10 n -1) ,最后约分即可. 原理 把先小数用 分数表示 .x=a/10 m +b/10 m+n +b/10 m+2n +b/10 m+3n .....化简一下x=1/10 m (a+b(1/10 n +1/10 2n +1/10 3n +....)),后面的 等比数列用求和公式 代替,x=1/10 m (a+b/(10 n -1)),最后通分一下就可以得到x=(a(10 n -1)+b)/10 m (10 n -1),也就是 x=(a*10 n +b-a)/10 m (10 n -1) . 来源: https://www.cnblogs.com/VBEL/p/11437393.html