Fraction to Recurring Decimal

来源:互联网 发布:网络语红烧肉什么意思 编辑:程序博客网 时间:2024/05/22 01:47

Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.

If the fractional part is repeating, enclose the repeating part in parentheses.

For example,

Given numerator = 1, denominator = 2, return “0.5”.
Given numerator = 2, denominator = 1, return “2”.
Given numerator = 2, denominator = 3, return “0.(6)”.
Credits:
Special thanks to @Shangrila for adding this problem and creating all test cases.

思路:以2/7为例:
例子

class Solution {public:    //long to string    string to_string(long x){        std::stringstream ss;        ss<< x;        return ss.str();    }    string fractionToDecimal(int num, int den) {//虽然声明为int,但测试的时候,会用大数        if(num==0){            return "0";        }        string sign="";//结果的符号        if(((num>>31)^(den>>31))!=0){//异号             sign="-";        }        long long numerator=abs((long long)num);//先转成long long,再用abs        long long denominator=abs((long long)den);        if(numerator%denominator==0){//能够整除            return sign+to_string((numerator/denominator));        }        long n=numerator/denominator;//整数部分        numerator=numerator%denominator;//分子        map<int,int> m;        long i=0;        string s="";        bool flag=false;        while(m.find(numerator)==m.end()){            m[numerator]=i;            numerator*=10;            i++;            if(numerator==0){//能够除尽                flag=true;                break;            }            if(numerator<denominator){//不够除,补0                s+="0";            }else{                int l=numerator/denominator;                s+=to_string(l);                numerator%=denominator;            }        }        if(flag){            return sign+to_string(n)+"."+s;        }        int index=m.find(numerator)->second;        return sign+to_string(n)+("."+s.substr(0,index))+"("+s.substr(index,i-index)+")";//整数+小数点+非循环小数部分+(+循环小数部分+);不知道"非循环小数"是不是存在:(    }};
0 0
原创粉丝点击