Мне нужна помощь в создании класса VeryLargeInteger, подобного BigInteger, однако в рамках моего задания мне не разрешено использовать BigInteger. Я начал с хранения больших чисел в виде строк, а затем преобразовал их в int [] для выполнения математических функций с ними. Проблема Я бегу в работает с двумя разными размерами массивов, таких как:Java добавление содержимого 2 массивов int size
int[] a = {1, 2, 3, 4, 5} // represents 12,345
int[] b = {1, 2, 4} //represents 124
Когда я добавляю их я получаю:
int[] c = {2, 4, 7, 4, 5}
вместо
int[] c = {1, 2, 4, 6, 9}
Это немного беспорядочный.
import java.util.Arrays;
public class VeryLargeInteger
{
int[] test, test2;
String temp, temp2;
int size;
VeryLargeInteger(int[] input)
{
int[] test = input;
System.out.println(Arrays.toString(test));
}
VeryLargeInteger(long input1)
{
long input = input1;
temp = Long.toString(input1);
test = convert(temp);
System.out.println(Arrays.toString(test));
}
VeryLargeInteger(String input1)
{
temp = input1;
test = convert(input1);
System.out.println(Arrays.toString(test));
}
public static int[] convert(String input)
{
int [] array = new int[input.length()];
for (int i = 0; i < input.length(); i++)
{
int value = input.charAt(i) - '0';
array[i] = value;
}
return array;
}
VeryLargeInteger add(VeryLargeInteger other)
{
int max = Math.max(this.temp.length(), other.temp.length());
int[] result = new int[max];
int carry = 0;
for (int i = 0; i < max; ++i)
{
int a = i < this.test[i] ? this.test[this.test[i] - i -1] : 0;
int b = i < other.test[i] ? other.test[other.test[i] - i -1] : 0;
int sum = a + b + carry;
carry = sum/10;
sum -= carry;
result[result.length - i - 1] = sum;
}
VeryLargeInteger added = new VeryLargeInteger(result);
return added;
}
/*
VeryLargeInteger sub(VeryLargeInteger other)
{
}
VeryLargeInteger mul(VeryLargeInteger other)
{
}
VeryLargeInteger div(VeryLargeInteger other)
{
}
VeryLargeInteger mod(VeryLargeInteger other)
{
}
static String toString(VeryLargeInteger other)
{
}*/
public static void main(String[] args)
{
VeryLargeInteger a = new VeryLargeInteger(1050L);
VeryLargeInteger b = new VeryLargeInteger("121123");
VeryLargeInteger c = a.add(b);
}
}
Покажите нам свой код. –
Вы найдете все свои арифметические операции намного проще, если вы храните свои массивы в порядке возрастания порядка места, а не уменьшаетесь. Например, используйте '{5, 4, 3, 2, 1}' для хранения 12345. –
(Обратите внимание на приведенный выше комментарий Дэвида: предлагаемый поворот позволяет легко проверить «концы» чисел при итерации математики ops, так что фиктивный «ведущий 0» должен быть сохранен.) – user2864740