《算法竞赛入门经典》(第2版) 习题3-8循环小数

前言

从这题我真的体会到了 “题题平等”,题目短它就简单了吗,题目长它就难了吗?虽然大部分情况下简单的题目是比较短,等下等下,再往下讲我觉得都上升到人生问题了,以上,END。:)

题目

UVa原题传送门:https://vjudge.net/problem/UVA-202

思路

倒腾了半个早上,看了好几篇博客,然后我笔算了一下除法,余数的情况总共就那(分母-1)种,当出现了相同余数,那它这个除法过程不就从之前的起点再来,进入一个循环了吗?! 我从梦中惊醒!!!我对这题所有的奇奇怪怪的疑问,都源自于这里!!!

所有的分数,要么是有限小数,要么是无限循环小数!!!

有限小数的情况就不说了,说说无限小数的情况(其实也包含了有限小数,毕竟可以在有限小数尾巴一直无限补00000000…),例如: 5 / 7,笔算的过程是:将分子不断乘10后,再除以分母,再取余进入下一次计算(就是小学除法嘛)。那所有的余数情况总共就:1、2、3、4、5、6 六种(这里不包括0,若得出0属于有限小数了的范畴了),当笔算到其中随便一个余数出现第二次时,就要进入循环了,重复上一次的计算过程了。不懂证明,就像“1+1=2”你证明给我看一下???(嘿嘿嘿)

但是实际情况确实是这样,后面的计算就是在不断循环,循环节最大长度就是(分母-1)。如果还不清楚,看看我的丑字:
《算法竞赛入门经典》(第2版) 习题3-8循环小数

代码思路

AC代码