java - Java中使用双循环链表的多重大小数

标签 java

大家好,我有下一个问题:我必须对非常大的小数进行求和、休息、除法和乘法,例如: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++;
        }
}

最佳答案

如果我正确理解你的问题...

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

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

关于java - Java中使用双循环链表的多重大小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56999158/

相关文章:

java - 如何有效地将大数据结构写入文件?

java - 如何在 Java 中编写抗锯齿程序

套接字编程中的 Java 拖放问题

java - 如何在 ANTLR 的访问者模式下检查 token 的替代品?

java - 简单的 if 语句似乎没有执行代码的某些部分

java - 如何检查我的线程是否正在运行 Java

java - 在 Spring MVC 中使用 @PathVariable 绑定(bind)以点分隔的字符串

java - Android Studio Activity 未启动

java - 保持最后一个对象处于 Activity 状态并按日期停用较旧的对象

java - 如何编写特定的随机数方案?