задание на codewars
Create a function taking a positive integer as its parameter and returning a string containing the Roman Numeral representation of that integer.
Modern Roman numerals are written by expressing each digit separately starting with the left most digit and skipping any digit with a value of zero. In Roman numerals 1990 is rendered: 1000=M, 900=CM, 90=XC; resulting in MCMXC. 2008 is written as 2000=MM, 8=VIII; or MMVIII. 1666 uses each Roman symbol in descending order: MDCLX
вот код
public static String solution(int n) {
map.put(1, "I");
map.put(5, "V");
map.put(10, "X");
map.put(50, "L");
map.put(100, "C");
map.put(500, "D");
map.put(1000, "M");
numGen(n, map);
while (!numbers.isEmpty()) {
romeNumCreator(numbers.poll());
}
return sb.toString();
}
static Queue<Integer> numGen(int n, Map<Integer, String> map) {
//int[] discharges = {1, 10, 100, 1000};
String s = String.valueOf(n);
int length = s.length();
do {
if (map.containsKey(n)) {
numbers.add(n);
break;
}
int temp = n / DISCHARGES[length - 1];
if (temp == 0) {
length--;
continue;
}
n %= DISCHARGES[length - 1];
int num = temp * DISCHARGES[length - 1];
numbers.add(num);
length--;
} while (length > 0);
return numbers;
}
static void romeNumCreator(int num) {
int n = num;
if (map.containsKey(n)) {
sb.append(map.get(n));
return;
}
int length = String.valueOf(n).length();
int count = n / DISCHARGES[length - 1];
if (count <= MAX_REPEAT) {
while (count > 0) {
sb.append(map.get(DISCHARGES[length - 1]));
count--;
}
} else if (map.containsKey(n + DISCHARGES[length - 1])) {
sb.append(map.get(DISCHARGES[length - 1])).append(map.get(n + DISCHARGES[length - 1]));
} else {
int sum = 0;
int res = n;
do {
res -= DISCHARGES[length - 1];
sum += DISCHARGES[length - 1];
} while (!map.containsKey(res));
sb.append(map.get(res));
romeNumCreator(sum);
}
}
}
Вот что мне выдает test с codewars
ConversionTest
shouldConvertToRoman
solution(4) should equal to IV expected:<I[]V> but was:<I[I]V>
Вчем дело не могу понять вывод то правильный