C语言输入一个分数,输出值,并标记循环节


输入一个形如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/56=0.803(571428)
【输入格式】
单独的一行包括被空格分开的N和D,1<=N,D<=100000。
【输出格式】
输出一行小数的表示方法上面已经说得很明白了。
【样例输入】
45 56
【样例输出】
0.803(571428)

c 算法

flyfish 12 years, 6 months ago

简单的说下个人的想法吧
首先处理结果的整数部分,直接N/D得到整数部分,例如45/46=0,输出“0.”
接下来是小数部分,维护一个链表,链表的节点数据是分子模除分母得到的商a和余数b,然后b*10模除分母,保存得到的商和余数,利用余数在链表中查找节点上是否存在该余数值,如果找到那么停止,记下该节点的位置设为q,输出这个链表的节点商的值,当到达q位置的时候输出“(”接着输出知道链表结束时输出“)”。如果刚好整除,那么直接输出

操作的过程:
例如,45 56
45/56=0;输出“0.”
45 * 10 56 商为8,a=8,余数为2,b=2,存入链表中
然后2 * 10 56 商为0,余数为20存入链表中,余数20在链表中查找,没有找到继续。。。

楼主写错了一个数是56不是46.。。。

无产光辉指 answered 12 years, 6 months ago

Your Answer