注意有很多地方关于long 和int的处理
比如赋值n, d判断是否应该是负数的时候
如果写成
long n = (long) numerator>0? numerator: -numerator; long d = (long) denominator>0? denominator:-denominator;
就会有错误,可能是numerator作为int太短,所以前面加负号出错
public class Solution { public String fractionToDecimal(int numerator, int denominator) { // 我觉得特别清晰受益的一个解法https://leetcode.com/discuss/27159/my-java-solution // long n = Math.abs(numerator), d = Math.abs(denominator);// 可能是特别大的数不能这么写 long n = numerator; long d = denominator; n = n>0? n:-n; d = d>0? d:-d; // 不要忘了全部变正数 String s = Long.toString(n/d); int index = 0; HashMap<Long, Integer> hm = new HashMap<Long, Integer>(); n = n%d; if(n!=0) s += "."; index += s.length(); // current digit‘s position,//idx放在这里才会及时反映出,小数点后的位置 //不断乘以10求得小数点后的位数 while(n>0){ if(hm.get(n)==null) hm.put(n, index); else{ s = s.substring(0,hm.get(n)) + "(" + s.substring(hm.get(n),index) + ")"; break; } n *=10; s += Long.toString(n/d); n %= d; index++; } // if(numerator*denominator<0) s = "-"+s;// 可能是特别大的数不能这么写 if((numerator<0&&denominator>0) ||(numerator>0&& denominator<0)) s = "-"+s; return s; } }
原文:http://www.cnblogs.com/jiajiaxingxing/p/4453124.html