您的位置:首页 > 其它

Fraction to Recurring Decimal 分数转为小数

2015-05-28 22:18 363 查看


Fraction to Recurring Decimal

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.

class Solution {
public:
//sprintf(temp, "%d", ss)用一个Map记录每一个余数,当出现重复的余数时,那么将会进入循环,两个重复余数之间的部分就是循环体
    string fractionToDecimal(int numerator, int denominator) {
        
        string ans;
        if(numerator==0)
            return "0";
        if(denominator==0)
            return "";
        
        if((numerator<0)^(denominator<0))
        {
            ans+="-";
        }
        long long a=numerator,b=denominator;
        if(a<0) a=-a;
        if(b<0) b=-b;
        
        long long res=a/b;
        char str[20];  
        sprintf(str, "%lld", res); 
        ans+=str;
        long long rem=(a%b)*10;
        if(rem==0)
            return ans;
            
        map<long long ,int>mm;
        ans+=".";
        while(rem!=0)
        {
            if(mm.count(rem)!=0)
            {
                int beg=mm[rem];
                string p1=ans.substr(0,beg);
                string p2=ans.substr(beg,ans.length());
                ans=p1+"("+p2+")";
                return ans;
            }
            
            mm[rem]=ans.length();
            res=rem/b;
            char str[20];  
            sprintf(str, "%lld", res); 
            ans+=str;
            rem=(rem%b)*10;
        }
        return ans;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: