• leetcode 166分数到小数


     

    手动排除特殊情况;

    对于一般情况,使用位运算和加减法来计算除法,使用sign记录结果符号;(这部分为leetcode 29题的答案)

    使用hashmap来记录循环体出现的开始位置(如果有的话),使用flag记录有无循环体出现;

    class Solution {
    public:
        string fractionToDecimal(int numerator, int denominator) {
            if((numerator==INT_MIN||numerator==INT_MAX)&&(denominator==1||denominator==-1)){
                if(numerator==INT_MIN){
                    return denominator==1?"-2147483648":"2147483648";
                }
                if(numerator==INT_MAX){
                    return denominator==-1?"-2147483647":"2147483647";
                }
            }
            if(denominator==0) return "";
            string res;
            int sign=numerator^denominator;
            if(numerator==0) sign=1;
            long num=labs(numerator),den=labs(denominator),ans=0,r=0;
            for(int i=31;i>=0;i--){
                if((num>>i)>=den){
                    ans+=1<<i;
                    num-=den<<i;
                }
            }
            r=num;
            
            if(ans==0) res+="0";
            while(ans!=0){
                res+=ans%10+'0';
                ans=ans/10;
            }
            if(sign<0) res+="-";
            reverse(res.begin(),res.end());
            if(r!=0)
                res+=".";
            int rst=0,flag=0;
            unordered_map<int,int>m;
            string right;
            int i=0;
            //此处分数不会是无线不循环小数,因此只需要判断是否除尽和是否循环两个break条件就可以了;
            while(r!=0){
                r*=10;
                if(m.count(r)) {flag=1;break;}
                m[r]=i;
                if(r>den){
                    rst=r/den;
                    r=r-rst*den;
                    right.push_back('0'+rst);
                }else{
                    right+="0";
                }
                i++;
            }
            if(flag==1){
                res=res+right.substr(0,m[r])+"("+right.substr(m[r])+")";
            }else{
                res+=right;
            }
            return res;
        }
    };
  • 相关阅读:
    LNMP
    Unable to guess the mime type as no guessers are available 2 9
    django--模型字段引用
    no python application found, check your startup logs for errors
    uWSGI+django+nginx的工作原理流程与部署历程
    进程管理supervisor的简单说明
    Django 部署(Nginx)
    MyBatis学习教程
    Spring教程
    互联网的寒冬该如何度过
  • 原文地址:https://www.cnblogs.com/joelwang/p/10949658.html
Copyright © 2020-2023  润新知