首页 > 编程语言 >java大数加法的一种思路

java大数加法的一种思路

时间:2023-04-11 10:45:33浏览次数:32  
标签:thisNum java temp 大数 int SuperNum 加法 进位 numList

package org.example;


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class SuperNum {

    public List<Integer> numList;

    /**
     * 成员变量的set方法
     * @param numList
     */
    public void setNumList(List<Integer> numList) {
        this.numList = numList;
    }

    /**
     * 从键盘输入
     */
    public void inputNumList() {
        this.numList = new ArrayList<>();
        System.out.println("请输入数字");

        Scanner sc = new Scanner(System.in);
        String inputString = sc.nextLine();

        for (int i = 0; i < inputString.length(); i++) {
            int n = Integer.parseInt(String.valueOf(inputString.charAt(i)));
            numList.add(0, n);
        }
    }

    /**
     * 输出存储的数字
     */
    public void printNum() {

        for (int i = this.numList.size()-1; i >= 0; i--) {
            System.out.print(this.numList.get(i));
        }
        System.out.println();
    }
}

public class Main {

    public static SuperNum SumSuperNum(SuperNum num1, SuperNum num2) {

        List<Integer> numList1 = num1.numList;
        List<Integer> numList2 = num2.numList;
        List<Integer> newList = new ArrayList<>();

        int minLen = Math.min(numList1.size(), numList2.size());

        int temp = 0; // 进位标记
        int thisNum;

        // 从个位起相加
        for (int i = 0; i < minLen; i++) {
            thisNum = numList1.get(i) + numList2.get(i) + temp;
            // 还原进位标记
            temp = 0;

            if (thisNum >= 10) {
                // 需要进位
                temp = 1;
                thisNum = thisNum - 10;
                newList.add(thisNum);
            } else {
                // 不需要进位
                temp = 0;  // 还原进位标记
                newList.add(thisNum);
            }
        }

        // 处理剩余数字
        List<Integer> remainNum = numList1.size() > numList2.size() ? numList1 : numList2;
        for (int i = minLen; i < remainNum.size(); i++) {
            thisNum = remainNum.get(i) + temp;
            // 还原进位标记
            temp = 0;

            if (thisNum >= 10) {
                // 需要进位
                temp = 1;
                thisNum = thisNum - 10;
                newList.add(thisNum);
            } else {
                // 不需要进位
                temp = 0;  // 还原进位标记
                newList.add(thisNum);
            }
        }

        SuperNum resultNum = new SuperNum();
        resultNum.setNumList(newList);

        return resultNum;
    }

    public static void main(String[] args) {

        SuperNum superNum1 = new SuperNum();
        superNum1.inputNumList();

        SuperNum superNum2 = new SuperNum();
        superNum2.inputNumList();

        SuperNum Result = SumSuperNum(superNum1, superNum2);
        System.out.print("求和结果 = ");
        Result.printNum();
    }
}


/**
 *
 * 42846280183517070527831839425882145521227251250327
 * 55121603546981200581762165212827652751691296897789
 * 97967883730498271109594004638709798272918548148116
 */

 

标签:thisNum,java,temp,大数,int,SuperNum,加法,进位,numList
From: https://www.cnblogs.com/libayu/p/17305418.html

相关文章

  • SpringBoot线程池和Java线程池的实现原理
    使用默认的线程池方式一:通过@Async注解调用publicclassAsyncTest{@Asyncpublicvoidasync(Stringname)throwsInterruptedException{System.out.println("async"+name+""+Thread.currentThread().getName());Thread.sleep(10......
  • JavaScript 去除数组中重复的元素 得到新数组
    方法一:思路:准备一个新数组,将原数组中的元素一一放入新数组,放入之前判断该元素是否存在新数组中,不存在的话就直接存入新数组。functionuniqueArr(arr){ varnewArr=[]; for(leti=0;i<arr.length;i++){ if(newArr.indexOf(arr[i])==-1){ newArr.push(arr[i]); } } r......
  • Javascript 原型与原型链
    在BrendanEich设计Javascript时,借鉴了Self和Smalltalk这两门基于原型的语言。之所以选择基于原型的面向对象系统,是因为BrendanEich一开始没有打算在JavaScript中加入类的概念,其设计初衷是为非专业的开发人员提供一个方便的工具,使其使用尽可能简单、易学。随着人们对网页要求的逐......
  • java包装类
    基本数据类型包装类byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLongfloatFloatdoubleDouble/*Integeri=100;intj=newInteger(100); 自动装箱调用的是valueOf()方法,而不是newInteger()方......
  • java jar包运行用外置配置yml文件
    1.准备文件和目录2.启动命令java-jar-Dspring.config.location=config/application.ymldatachangenew.jar ......
  • delphi 11.3 java.ioexception:cleartext http traffic [IP地址] not permitted
    要在AndroidManifest.xml添加如下属性即可:参考:HowtoFixCleartextHTTPTrafficnotPermittedinAndroid-TRENDOCEANS ......
  • 用Java写一段中国身份证的正则表达式,要求验证身份证中的日期,且大于1900年,以及校验码验
    以下是一个Java正则表达式,可用于验证中国身份证中的日期,并要求日期在1900年及之后:Stringregex="(?:(?:19[0-9]\\d)|(?:[2-9]\\d{3}))(?:0[1-9]|1[012])(?:0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]";这个正则表达式的含义如下:(?:(?:19[0-9]\\d)|(?:[2-9]\\d{3})):匹配1900年......
  • Java虚拟机整体思路
    我们日常编程的Java编程是在Java语言规范代码,通过javac前端编译器编译器,产生字节码规范,此时我们应该对字节码文件结构有一个大致的认识,此时我们了解了Java虚拟机内存面局(专业术语叫运行时数据区),类加载器通过加载器将字节码文件加载到内存中(此时应该对类加载的过程有一个大致的了解......
  • java.lang.NoSuchMethodException: com.innovation.web.BuyServlet.$%7Bid%7D(javax.s
    问题描述我在html页面写了get到删除某条记录的url路径里去,然后一直显示这个错误,也到不了相应的后台方法里面去,就很离谱欸家人们!问题解决听从友友的建议,将之前的/deleteCarts/${id}改成了之前用过的那种样式,也就是/deleteCarts?id=${id},然后就成功跳转到那个后台servlet里面啦!......
  • 高精度加法C++
    #include<iostream>#include<vector>usingnamespacestd;vector<int>Add(vector<int>&A,vector<int>&B){vector<int>C;intt=0;for(inti=0;i<A.size()||i<B.size();i++){if(i<A.size(......