字节面试题:整数除法
题目描述:输入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)"
}
}
#牛客激励计划#
阿里云工作强度 727人发布
