zoukankan      html  css  js  c++  java
  • Leetcode N0.166

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

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

    示例 1:

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

    输入: numerator = 2, denominator = 1
    输出: "2"
    示例 3:

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

    思路:结果有三种,分别为整数、有限小数、有限循环小数。

    对于前两种,可以通过判断余数是否为0的方法来求解。对于后者,可以采用容器的方法来存储所有余数,本题使用map容器,第一个数为余数值,第二个数为第几个余数(用于在循环处插入括号)。

    代码:

    //166
    string fractionToDecimal(int numerator, int denominator)
    {
        if(numerator==0) return "0";
        short s1 = numerator<0?-1:1;
        short s2 = denominator<0?-1:1;
        long long n1 = abs((long long)numerator);
        long long n2 = abs((long long)denominator);
        long long num = n1>=n2?n1/n2:0;
        long long d = n1%n2;
        string result = to_string(num);
        if(s1*s2<0)
            result ="-" + result;
        if(d==0) return result;  //整数商
        string temp;
        map<int,int> m;
        int i=0;
        while(d!=0 && m.find(d)==m.end())
        {
            m[d] = i++;
            d *=10;
            temp += (d/n2+'0');
            d = d%n2;
        }
        if(d==0) return result = result+"."+ temp;//可除尽分数
        temp = temp.insert(m[d],"(");
        temp +=")";
        result = result +"." + temp ;//循环分数
        return result;
    }//166

    说明:本系统为windows x64,IDE为 Qt 的 mingw 32,发现 int 和 long的字节长度一样,long long 类型才是 int 的两倍长度。经过查资料,最后得知 int 会根据系统自动变化,实际为int64_

  • 相关阅读:
    Head first java chapter 8 接口与抽象类
    Head first java chapter 4 对象的行为
    Head first java chapter 3认识变量
    Head first java chapter 2 拜访对象村
    Head first java chapter 1
    Invalid left-hand side in assignment
    swtich多个case使用同一操作
    CSS绘制小三角
    超出文字出现省略号不换行
    css代码实现列表等宽
  • 原文地址:https://www.cnblogs.com/2Bthebest1/p/11078278.html
Copyright © 2011-2022 走看看