题目
Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.
If the fractional part is repeating, enclose the repeating part in parentheses.
For example,
Given numerator = 1, denominator = 2, return “0.5”.
Given numerator = 2, denominator = 1, return “2”.
Given numerator = 2, denominator = 3, return “0.(6)”.
分析
考虑正负数
先计算整数部分
然后计算混循环小数部分
当除数不含2、5时
开始计算hashset纯循环小数部分
class Solution {
public static String fractionToDecimal(int numerator1, int denominator1) {
long numerator = numerator1;
long denominator = denominator1;
boolean neg = false;
if (numerator<0) {
neg = !neg;
numerator = -numerator;
}
if (denominator<0) {
neg = !neg;
denominator = -denominator;
}
long inte = numerator/denominator;
StringBuffer result = new StringBuffer(Long.toString(inte));
if (neg && numerator!=0) {
result.insert(0,"-");
}
numerator = numerator % denominator;
if (numerator == 0) {
return result.toString();
}
result.append(".");
while (!isClean(denominator)) {
numerator = numerator*10;
long diff = getsml(numerator, denominator);
numerator = numerator/diff;
denominator = denominator/diff;
result.append(Long.toString(numerator/denominator));
numerator = numerator%denominator;
}
if (numerator == 0) {
return result.toString();
}
result.append("(");
long remain = numerator;
HashSet<Long> hhh = new HashSet<>();
while (!hhh.contains(remain)) {
hhh.add(remain);
remain = remain*10;
result.append(remain/denominator);
remain = remain%denominator;
}
System.out.print(neg);
result.append(")");
return result.toString();
}
private static boolean isClean(long num) {
if (num%2==0 || num%5==0) {
return false;
} else {
return true;
}
}
private static long getsml(long num1, long num2) {
if (num1>num2) {
long tmp = num1;
num1 = num2;
num2 = tmp;
}
while (num2-num1!=0) {
num2 = num2-num1;
if (num1>num2) {
long tmp = num1;
num1 = num2;
num2 = tmp;
}
}
return num1;
}
}