<leetcode c ++> 166. 10進数の小数部

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

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

示例 1:

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

示例 2:

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

示例 3:

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


intを使用した最後のいくつかのテストケースは本当に良くないので、私はlongに変更しました。アイデアは、小数部と整数部を保存するために独自の計算プロセスをシミュレートすることです。ここでは、マップ(剰余、小数位に対応する)を使用するトリックを使用しています)、ループ本体がマークされるように

クラス解決{
 パブリック文字列 fractionToDecimal(長い 整数 NUM、長い int型D){ 
        ベクトル < INT > v_z。    // 整数部分 
        ベクトル< int > v_d;    // 小数部分 
        unordered_map < long  intint > 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];
                    休憩; 
                } 
            } 
        } 
        string res = "" ;
        if(v_z.size()== 1&& v_z [ 0 ] == 0 && negative)res + = ' - ' ;
        forint i = 0 ; i <v_z.size(); i ++ ){ 
            res + = to_string(v_z [i]); 
        } 
        res + = ' ' ;
        forint i = 0 ; i <v_d.size(); i ++ 
        { 
            if(circle && i == k- 2)res + = ' ' ; 
            res + = to_string(v_d [i]); 
        }
        if(circle)res + = ' ' ;
        解像度を返す; 
    } 
};

 

おすすめ

転載: www.cnblogs.com/Dancing-Fairy/p/12673425.html