[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 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解