Умножение больших десятичных чисел В Java с использованием двойных кругов связанных списков - PullRequest
0 голосов
/ 12 июля 2019

Привет всем, у меня есть следующая проблема: я должен суммировать, отдыхать, делить и умножать до действительно больших десятичных чисел, таких как: 14578541254,45874455874.Итак, Мои решения сосредоточены на двойном списке ссылок на Java, поэтому я реализовал класс вроде: Node, ListNode и так далее.Мне нужна помощь в множественности.Как умножить или разделить два списка, каждый из которых представляет большое десятичное число?Как справиться с этим?Заранее спасибо.

public class Nodo {//class Node
    private Object digito;
    private Nodo siguienteNodo; //NextNode
    private Nodo anteriorNodo; //Node Before


    public Nodo(Object digito) {
        this.digito = digito;
        this.siguienteNodo = null;
        this.anteriorNodo = null;
    }

    /* cuerpo del constructor sin args */
    public Nodo() {
    }

    /* getters y setters */
}

public class ListaCirculaDoblementeEnlazada {

    /* Node de Start y Finish /
    private Nodo inicio;
    private Nodo fin;
    private int tamanio;//size of the list

    private ListaCirculaDoblementeEnlazada() {
        inicio=null;
        fin=null;
        tamanio=0;
    }

     public boolean esVacia(){
            return inicio == null;
      }

     public int getTamanio(){
            return tamanio;
     }
     //List Nodes
       public void listar(){
            // Verifica si la lista contiene elementoa.
            if (!esVacia()) {
                // Crea una copia de la lista.
                Nodo aux = inicio;
                // Posicion de los elementos de la lista.
                int i = 0;
                // Recorre la lista hasta el final.
                while(aux != null){
                    // Imprime en pantalla el valor del nodo.
                    System.out.print(i + ".[ " + aux.getDigito() + " ]" + " ->  ");
                    // Avanza al siguiente nodo.
                    aux = aux.getSiguienteNodo();
                    // Incrementa el contador de la posión.
                    i++;
                }
            }
      }
     //Add to the end
     public void agregarAlFinal(String valor){
            Nodo nuevo = new Nodo();
            nuevo.setDigito(valor);
            if (esVacia()) {
                inicio = nuevo;
                fin = nuevo;
                inicio.setSiguienteNodo(fin);
                inicio.setAnteriorNodo(fin);
                fin.setSiguienteNodo(inicio);
                fin.setAnteriorNodo(inicio);

            } else{
                   nuevo.setAnteriorNodo(fin);
                   nuevo.setSiguienteNodo(inicio);
                   fin.setSiguienteNodo(nuevo);
                   inicio.setAnteriorNodo(nuevo);
                   fin=nuevo;
         }
          tamanio++;
     }    

        //Add to the begin
        public void agregarAlInicio(String valor){
            Nodo nuevo = new Nodo();
            nuevo.setDigito(valor);
            if (esVacia()) {
                    inicio = nuevo;
                    fin = nuevo;
                    inicio.setSiguienteNodo(fin);
                    inicio.setAnteriorNodo(fin);
                    fin.setSiguienteNodo(inicio);
                    fin.setAnteriorNodo(inicio);
            } else{

                   nuevo.setSiguienteNodo(inicio);
                   nuevo.setAnteriorNodo(fin);
                   fin.setSiguienteNodo(nuevo);
                   inicio.setAnteriorNodo(nuevo);
                   inicio=nuevo;
            }
            // Incrementa el contador de tamaño de la lista.
            tamanio++;
        }
}

1 Ответ

0 голосов
/ 12 июля 2019

Если я правильно понимаю ваш вопрос ...

Используйте Класс Java BigDecimal вместо реализации этого самостоятельно.

BigDecimal a = new BigDecimal("14578541254");
BigDecimal b = new BigDecimal("45874455874");
BigDecimal result = a.multiply(b);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...