166. 分数到小数

Posted yuhong1103

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了166. 分数到小数相关的知识,希望对你有一定的参考价值。

 1 class Solution 
 2 {
 3 public:
 4     //小数部分如果余数重复出现两次就表示该小数是循环小数了
 5     string fractionToDecimal(int numerator, int denominator) 
 6     {
 7         if(denominator==0) return "";//边界条件,分母为0
 8         if(numerator==0) return "0";//边界条件,分子为0
 9         string result;
10         
11         //转换为longlong防止溢出
12         long long num = static_cast<long long>(numerator);
13         long long denom = static_cast<long long>(denominator);
14         
15         //处理正负号,一正一负取负号
16         if((num>0)^(denom>0))result.push_back(-);
17         
18         //分子分母全部转换为正数
19         num=abs(num);denom=abs(denom);
20         
21         //处理整数部分
22         result.append(to_string(num/denom));
23         
24         //处理小数部分
25         num %= denom;                         //获得余数
26         if(num==0)return result;             //余数为0,表示整除了,直接返回结果
27         result.push_back(.);              //余数不为0,添加小数点
28         int index=result.size()-1;          //获得小数点的下标
29         unordered_map<int,int> record;      //record用来记录出现重复数的下标,然后将‘(‘插入到重复数前面就好了
30         
31         while(num && record.count(num)==0)
32         {   //小数部分:余数不为0且余数还没有出现重复数字
33             record[num]=++index;
34             num*=10;                        //余数扩大10倍,然后求商,和草稿本上运算方法是一样的
35             result+=to_string(num/denom);
36             num%=denom;
37         }
38 
39         //如果能够被整除,上面已经整除完了
40         if(record.count(num)==1)
41         {           //出现循环余数,我们直接在重复数字前面添加‘(‘,字符串末尾添加‘)‘
42             result.insert(record[num],"(");
43             result.push_back());
44         }
45         return result;
46     }
47 };

 

以上是关于166. 分数到小数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第166题—分数到小数——Python实现

题目地址(166. 分数到小数)

题目地址(166. 分数到小数)

166. 分数到小数 (模拟除法)

166. 分数到小数

leetcode-166. 分数到小数