在Java中使用双圆链表将大十进制数相乘

时间:2019-07-12 01:33:14

标签: java

大家好,我的下一个问题是:我必须对大的十进制数字求和,休息,除法和乘法:14578541254,45874455874。因此,我的解决方案着眼于Java中的double linkelist,因此我实现了诸如: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 :(得分:0)

如果我正确理解了您的问题...

使用Java's BigDecimal类而不是自己实现。

BigDecimal a = new BigDecimal("14578541254");
BigDecimal b = new BigDecimal("45874455874");
BigDecimal result = a.multiply(b);