您的位置:首页 > 其它

[LeetCode]166. Fraction to Recurring Decimal

2016-03-06 15:17 387 查看

Problem Description

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)”.

[]https://leetcode.com/problems/fraction-to-recurring-decimal/]

思路

用Map保存每次除剩下的余数和ans的长度,这样如果出现相同的余数,说明到了循环的起点。。

Code

package q166;

import java.util.HashMap;
import java.util.Map;

public class Solution {

public String fractionToDecimal(int numerator, int denominator) {
String ans = "";
int symbol = 1;
long mydenominator=(long)denominator;
long mynumerator=(long)numerator;
if (mynumerator < 0) {
symbol *= -1;
mynumerator *= -1;
}
if (mydenominator < 0) {
symbol *= -1;
mydenominator *= -1;
}
if (symbol < 0&&mynumerator>0)
ans += "-";
if (mynumerator / mydenominator > 0)
ans += mynumerator / mydenominator + "";
else if(mynumerator / mydenominator==0) ans += "0";

if (mynumerator % mydenominator == 0)
return ans;
else {
ans += ".";
int i = 0;
long a = mynumerator;
Map<Long,Integer> m=new HashMap<Long,Integer>();
a -= (Math.ceil(a / mydenominator)) * mydenominator;
m.put(a, ans.length());
while (i++ < 3000&&a!=0) {
a *= 10;
if(a / mydenominator<0) ans += -a / mydenominator;
else ans += a / mydenominator;
a -= (Math.ceil(a / mydenominator)) * mydenominator;
if(m.containsKey(a)){
ans=ans.substring(0,m.get(a))+"("+ans.substring(m.get(a))+")";
break;
}else{
m.put(a, ans.length());
}
}
}
return ans;

}

//
//  public static void main(String[] args) {
//      Solution s = new Solution();
//      System.out.println(s.fractionToDecimal(-2147483648,-1));
//  }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode