【C语言刷LeetCode】166. 分数到小数(M)

该博客介绍了一道LeetCode题目,要求将分数转换为小数,并在循环部分使用括号表示。博主强调了处理负数、内存分配以及判断循环小数的难点,并分享了解决这些问题的方法。
摘要由CSDN通过智能技术生成

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。

如果小数部分为循环小数,则将循环的部分括在括号内。

示例 1:

输入: numerator = 1, denominator = 2
输出: "0.5"
示例 2:

输入: numerator = 2, denominator = 1
输出: "2"
示例 3:

输入: numerator = 2, denominator = 3
输出: "0.(6)"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fraction-to-recurring-decimal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题隐藏了太多细节,稍不注意就容易出问题。

考虑负数不好处理,所以除数与被除数都转成整数处理。这里用abs会出问题,比如abs(-2147483648),所以用的 0 - 负数 得出正数。

0 - 负数在遇到-2147483648时,如果用int类型保存,还是会溢出,所以得用 long long 类型。

然后输出小数,到底多少位呢?如何申请内存?如果算出一个小数位,就动态增加一个内存,太麻烦,其实可以直接malloc一个1024大小的字符串数组,记得初始化就行。

接着就是灵活运用sprintf,比如说要添加负号,要添加括号等等。

然后要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值