#java
Вопрос:
В настоящее время я кодирую программу, которая преобразует число в формат word, и до сих пор я написал код, который принимает только максимальное значение целого числа (2,14 миллиарда). Мне было интересно, как бы я расширил возможности программы, чтобы принимать большие числа.
(Отредактировано): Я преобразовал все свои значения int в длинные типы данных. Мне удалось увеличить ограничение с 2,14 до 999 миллиардов, хотя не должно ли максимальное значение длинного типа данных составлять 9 квинтиллионов?
Код преобразователя:
public class Converter {
public static WordList wordFormat = new WordList();
public static final void converter(long value) {
long valueSize = String.valueOf(value).length();
String[] output = new String[(int) valueSize];
long outputSize = output.length;
long tracker = 1;
long commasCTR = 0;
long preValHolder = 0;
// Returns "Zero" if value = 0
if (value == 0) {
System.out.println("Zero");
return;
};
// Self-made Conversion Method
for (long valHolder = value, placeVal = 0; placeVal <= outputSize - 1; placeVal , tracker ) {
long remainder = valHolder % 10;
long nextDigit = valHolder / 10 % 10;
valHolder = valHolder / 10;
// Num to Word Conditional Statements
switch ((int) tracker) {
case 1:
if (placeVal == 0) {
output[(int) placeVal] = WordList.wordFormat[0][(int) remainder]; // Ones
} else {
output[(int) placeVal] = WordList.wordFormat[0][(int) remainder].concat(" " WordList.commas[(int) commasCTR]); // Commas
commasCTR ;
}
break;
case 2:
if (remainder == 1) { // Teens
output[(int) placeVal] = WordList.wordFormat[1][(int) preValHolder 1];
if (placeVal < 3) output[(int) placeVal - 1] = " ";
else output[(int) placeVal - 1] = WordList.commas[(int) commasCTR - 1];
} else if (placeVal > 3 amp;amp; preValHolder == 0 amp;amp; remainder == 0 amp;amp; nextDigit == 0) { // Comma Zero Value Handler
output[(int) placeVal - 1] = " ";
output[(int) placeVal] = WordList.wordFormat[2][(int) remainder];
} else {
output[(int) placeVal] = WordList.wordFormat[2][(int) remainder]; // Decades
}
break;
case 3:
output[(int) placeVal] = WordList.wordFormat[3][(int) remainder]; // Hundredths
break;
}
// Re-assigning Values
if (tracker == 3) tracker = 0;
preValHolder = remainder;
}
for (long i = outputSize - 1; i >= 0; i--) {
if (output[(int) i] == " ") continue;
System.out.print(output[(int) i].trim() " ");
}
return;
}
}
}```
Ответ №1:
Я думаю, вы могли бы использовать BigInteger https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html
Комментарии:
1. Я пробовал раньше, хотя у меня было много препятствий с кодом из-за того, что переменные не могли быть преобразованы, сравнены и т. Д. с большим специалистом.
2. Вы можете использовать долго, но у него также есть верхний предел
3. Я попытался преобразовать все мои целочисленные значения в длинный тип данных и набрал некоторые из них в целое число, до сих пор мне удавалось увеличить ограничение с 2,14 до 999 миллиардов. Хотя, по данным Google, максимальное значение длинного типа данных составляет 9 квинтиллионов. Почему это?
4. Я думаю, что исправил свою проблему. Позже я понял, что мой массив для запятых был ограничен только миллиардом, поэтому я также увеличил его, и теперь он исправлен! Спасибо