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. 分数到小数的主要内容,如果未能解决你的问题,请参考以下文章