给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2 输出: "0.5"
示例 2:
输入: numerator = 2, denominator = 1 输出: "2"
示例 3:
输入: numerator = 2, denominator = 3 输出: "0.(6)"
在真实的面试中遇到过这道题?
Code:
这题真是越来越恶心了啊
class Solution {
public String fractionToDecimal(int numerator, int denominator) {
String res = "";
if (numerator<0 && denominator>0 || numerator>0&&denominator<0) {
res+='-';
}
long num = Math.abs((long) numerator);
long dev = Math.abs((long) denominator);
long result = num/dev;
res+=Long.toString(result);
if (result*dev==num){
return res;
}
res+='.';
num -= result*dev;
num*=10;
HashMap<Long, Integer> map = new HashMap<>();
StringBuilder sb = new StringBuilder();
int idx = 0;
map.put(num,idx++);
while (true){
result = num / dev;
sb.append(result);
num-=result*dev;
if (num==0){
break;
}
num*=10;
if(map.containsKey(num)){
sb.append(')');
sb.insert((int)map.get(num),'(');
break;
} else {
map.put(num, idx++);
}
}
return res+sb.toString();
}
}