给定两个整数,分别表示分数的分子 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 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]; 休憩; } } } 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 + = ' )' ; 解像度を返す; } };