package com.thealgorithms.conversions; import java.util.ArrayList; import java.util.List; /** * Class that provides methods to convert a decimal number to a string representation * in any specified base between 2 and 36. * * @author Varun Upadhyay (...) */ public final class DecimalToAnyBase { private static final int MIN_BASE = 2; private static final int MAX_BASE = 36; private static final char ZERO_CHAR = '0'; private static final char A_CHAR = 'A'; private static final int DIGIT_OFFSET = 10; private DecimalToAnyBase() { } /** * Converts a decimal number to a string representation in the specified base. * For example, converting the decimal number 10 to base 2 would return "1010". * * @param decimal the decimal number to convert * @param base the base to convert to (must be between {@value #MIN_BASE} and {@value #MAX_BASE}) * @return the string representation of the number in the specified base * @throws IllegalArgumentException if the base is out of the supported range */ public static String convertToAnyBase(int decimal, int base) { if (base < MIN_BASE || base > MAX_BASE) { throw new IllegalArgumentException("Base must be between " + MIN_BASE + " and " + MAX_BASE); } if (decimal == 0) { return String.valueOf(ZERO_CHAR); } List digits = new ArrayList<>(); while (decimal > 0) { digits.add(convertToChar(decimal % base)); decimal /= base; } StringBuilder result = new StringBuilder(digits.size()); for (int i = digits.size() - 1; i >= 0; i--) { result.append(digits.get(i)); } return result.toString(); } /** * Converts an integer value to its corresponding character in the specified base. * This method is used to convert values from 0 to 35 into their appropriate character representation. * For example, 0-9 are represented as '0'-'9', and 10-35 are represented as 'A'-'Z'. * * @param value the integer value to convert (should be less than the base value) * @return the character representing the value in the specified base */ private static char convertToChar(int value) { if (value >= 0 && value <= 9) { return (char) (ZERO_CHAR + value); } else { return (char) (A_CHAR + value - DIGIT_OFFSET); } } }