本文共 1741 字,大约阅读时间需要 5 分钟。
将两个整数作为分子和分母处理时,需要将结果表示为小数形式。这种情况下,如果分数无法整除,可能会出现无限循环的小数部分。我们的任务是正确地将这些情况表示出来。
给定两个整数,分子和分母,目标是将其转换为小数字符串格式。在循环小数的情况下,循环节需要用括号括起来。例如:
我们可以通过模拟手工除法来找到循环节。每次将余数乘以10,然后除以分母。如果余数重复出现,就可以确定小数部分开始循环。
这种方法避免了直接处理小数部分带来的复杂性,能高效地处理循环小数问题。
以下是我们为实现上述思路开发的代码:
Solution.filename = "fractionToDecimal.java";public class Solution { public String fractionToDecimal(int numerator, int denominator) { if (numerator == 0) { return "0"; } StringBuilder fraction = new StringBuilder(); // 处理负号 if ((numerator < 0 ^ denominator < 0) { fraction.append("-"); } long num = Math.abs((long) numerator); long denom = Math.abs((long) denominator); fraction.append(num / denom); long remainder = num % denom; if (remainder == 0) { return fraction.toString(); } fraction.append("."); HashMap map = new HashMap<>(); while (remainder != 0) { if (map.containsKey(remainder)) { fraction.insert(map.get(remainder), '('); fraction.append(')'); break; } map.put(remainder, fraction.length()); remainder *= 10; fraction.append(remainder / denom); remainder %= denom; } return fraction.toString(); }} 这种方法能有效且准确地将分数转换为小数格式,同时正确处理循环小数的情况。
转载地址:http://fagyk.baihongyu.com/