zoukankan      html  css  js  c++  java
  • <leetcode c++>166. 分数到小数

    给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。

    如果小数部分为循环小数,则将循环的部分括在括号内。

    示例 1:

    输入: numerator = 1, denominator = 2
    输出: "0.5"
    

    示例 2:

    输入: numerator = 2, denominator = 1
    输出: "2"

    示例 3:

    输入: numerator = 2, denominator = 3
    输出: "0.(6)"


    用int最后几个测试用例实在是不行,我就改成long了 思路就是模拟我们自己计算的过程把小数部分和整数部分保存起来,这里用了一个小技巧,就是用map(余数,对应小数位置),这样好把循环体标记出来

    class Solution {
    public:
        string fractionToDecimal(long int num, long int d) {
            vector<int> v_z;    //整数部分
            vector<int> v_d;    //小数部分
            unordered_map<long int,int> m;
            bool circle=false;
            bool negative=false;
            if((num>0&&d<0)||(num<0&&d>0))negative=true;
            long int c=num%d;
            int k;
            if(c==0){
                return to_string(num/d);
            }       //无小数
            else{
                c=abs(c);
                m[c]=1;
                v_z.push_back(num/d);
                k=2;
                num=abs(num);
                d=abs(d);
                while(c!=0){
                    num=c*10;
                    m[c]=k;k++;
                    v_d.push_back(num/d);
                    c=num%d;
                    if(m[c]!=0){
                        circle=true;
                        k=m[c];
                        break;
                    }
                }
            }
            string res="";
            if(v_z.size()==1&&v_z[0]==0&&negative)res+='-';
            for(int i=0;i<v_z.size();i++){
                res+=to_string(v_z[i]);
            }
            res+='.';
            for(int i=0;i<v_d.size();i++)
            {
                if(circle&&i==k-2)res+='(';
                res+=to_string(v_d[i]);
            }
            if(circle)res+=')';
            return res;
        }
    };
  • 相关阅读:
    scrapy爬虫框架
    运用GRASP原则来做uml交互类图-------pos机实例
    csv文件读取
    文件编码解读
    smtp模块使用
    csv模块简单使用
    用Beautifulsoup 来爬取贴吧图片
    批处理命令——set
    bat批处理教程之for的/f参数
    docker 下 alpine 镜像设置时区的有效办法
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/12673425.html
Copyright © 2011-2022 走看看