166. Fraction to Recurring Decimal
2807 ワード
class Solution {
public String fractionToDecimal(int numerator, int denominator) {
int val = numerator / denominator;
int remain = Math.abs(numerator) % Math.abs(denominator);
String result = "";
Set<Integer> trailing = new HashSet<Integer>();
int next = -1;
int cur = -1;
int repeat = -1;
int den = Math.abs(denominator);
while (trailing.contains(cur) || next == 0) {
next = remain * 10 % den;
cur = remain * 10 / den;
trailing.add(cur);
result += Integer.toString(cur);
}
if (next == 0) {
return Integer.toString(val) + "." + result;
} else {
return Integer.toString(val) + "." //아...귀찮아...^^
}
}
}
public String fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) {
return "0";
}
StringBuilder fraction = new StringBuilder();
// If either one is negative (not both)
if (numerator < 0 ^ denominator < 0) {
fraction.append("-");
}
// Convert to Long or else abs(-2147483648) overflows
long dividend = Math.abs(Long.valueOf(numerator));
long divisor = Math.abs(Long.valueOf(denominator));
fraction.append(String.valueOf(dividend / divisor));
long remainder = dividend % divisor;
if (remainder == 0) {
return fraction.toString();
}
fraction.append(".");
Map<Long, Integer> map = new HashMap<>();
while (remainder != 0) {
if (map.containsKey(remainder)) {
fraction.insert(map.get(remainder), "(");
fraction.append(")");
break;
}
map.put(remainder, fraction.length());
remainder *= 10;
fraction.append(String.valueOf(remainder / divisor));
remainder %= divisor;
}
return fraction.toString();
}
Runtime: 3 ms, faster than 32.20% of Java online submissions for Fraction to Recurring Decimal.Memory Usage: 38.5 MB, less than 13.76% of Java online submissions for Fraction to Recurring Decimal.
面倒くさいので、、、、、
Luceneが持ってきてくれました^^
Reference
この問題について(166. Fraction to Recurring Decimal), 我々は、より多くの情報をここで見つけました https://velog.io/@jwade/166.-Fraction-to-Recurring-Decimalテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol