码迷,mamicode.com
首页 > 其他好文 > 详细

166. 分数到小数

时间:2020-04-03 16:21:34      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:溢出   dex   ongl   count   abs   ati   循环   条件   结果   

 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. 分数到小数

标签:溢出   dex   ongl   count   abs   ati   循环   条件   结果   

原文地址:https://www.cnblogs.com/yuhong1103/p/12627038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!