参考资料:左神算法课
我折腾了一下午……
我发现即便是有思路(我已经听老师讲过一遍了+按着老师的写法写过一遍),还是有很多细节问题是考虑不到的。
比如:测试案例中可能会有很大很大的测试值,这里是转成Long类型来处理。需要注意:HashMap<Long,Integer>,而在外面声明变量就是 long.
比如:正负号问题
public String fractionToDecimal(int nume, int deno)
{
if(deno==0)
{
return null;
}
if(nume==0)
{
return "0";
}
// sign
String sign = ((nume>0)^(deno>0))?"-":"";
// remove signs
long x=Math.abs((long)nume); // !! 否则 会有测试案例(测试值非常长)不通过的情况出现
long y=Math.abs((long)deno);
StringBuilder res = new StringBuilder();
res.append(sign+String.valueOf(x/y));
x%=y;// 余数
if(x==0)
{
return res.toString();
}
res.append(".");
HashMap<Long,Integer> map = new HashMap<>();
while(x!=0)
{
x*=10;
if(map.containsKey(x))
{
res.insert(map.get(x),"(");
res.append(")");
break;
}else{
map.put(x,res.length());
res.append(x/y);
x%=y;
}
}
return res.toString();
}