字节面试题:整数除法

题目描述:输入int a,int b,计算a/b,如果是无限循环小数需要把循环的情况输出出来,类似4/3=1.3(2),(2)表示从第二位开始循环

package org.example;
import java.util.*;

public class Main {
    public static String fractionToDecimal(int a, int b) { //计算 a / b
        if (a == 0) {
            return "0";
        }
        StringBuilder result = new StringBuilder();
        // Determine the sign
        if ((a < 0) ^ (b < 0)) {
            result.append("-");
        }
        //转成long防止溢出
        long num = Math.abs((long) a);
        long den = Math.abs((long) b);
        // Append the integer part
        result.append(num / den);
        num %= den;
        if (num == 0) { //说明整除了
            return result.toString();
        }
        result.append(".");
        // 开始处理小数的部分
        Map<Long, Integer> map = new HashMap<>(); //哈希表记录每个余数出现的位置
        while (num != 0) {
            if (map.containsKey(num)) {
                int index = map.get(num);
                result.insert(index, "(");
                result.append(")");
                break;
            }
            map.put(num, result.length());
            num *= 10;
            result.append(num / den);
            num %= den;
        }
        return result.toString();
    }

    public static void main(String[] args) {
        //输入int a,int b,计算a/b,如果是无限循环小数需要把循环的情况输出出来,类似4/3=1.3(2),(2)表示从第二位开始循环
        int a = 4;
        int b = 3;
        System.out.println(fractionToDecimal(a, b)); // 输出: "1.(3)"

        a = 1;
        b = 2;
        System.out.println(fractionToDecimal(a, b)); // 输出: "0.5"

        a = 2;
        b = 3;
        System.out.println(fractionToDecimal(a, b)); // 输出: "0.(6)"

        a = 1;
        b = 6;
        System.out.println(fractionToDecimal(a, b)); // 输出: "0.1(6)"
    }
}
#牛客激励计划#
全部评论
点赞 回复 分享
发布于 02-13 18:32 山西

相关推荐

评论
4
14
分享

创作者周榜

更多
牛客网
牛客企业服务