java 很长的大数 如何用String 相加,相乘?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 很长的大数 如何用String 相加,相乘?相关的知识,希望对你有一定的参考价值。

不要用与BigDecimal ,BigInteger 相关的那些。 我想了一下两个String的数加起来还好,但是如何进位就是关键了,哪位高手解释一番啊?! 最好程序加注解,谢谢各位啦!!

相加比较简单,用单层循环就能实现。进位的话因为加法只存在进1和不进两种情况,用一个boolean型标记一下就能实现。

相乘的有难度。
参考技术A 你这是何苦……
运算的话 BigDecimal 的位数和精度应该都可以满足你的要求了
即使是String 一般也是转会为BigDecimal 来运算 最后再转换为你需要的类型
参考技术B 两个String相加,不就变成一个String了么

什么意思,追问

对啊,要的是答案啊, 两个数相加,变成一个数啊。两个string加在一起,但是如何进位呢。。。

追答

我的意思是说
"111"+"222" 的值就变成"111222"了

你用String来处理的思路是错的,用数组来处理应该行的通

栈实现两个大数相加

import java.util.Scanner;
import java.util.Stack;

public class JavaDemo {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        /**
         * 第一个大数入栈
         */
        System.out.println("输入第一个大数:");
        String firstNum = scanner.nextLine();
        Integer integer = Integer.valueOf(firstNum);
        Stack firstStack = new Stack<Integer>();
        for (int n = 0; n < firstNum.length(); n++) {
            firstStack.push(integer % 10);// 从个位开始压入栈
            integer = integer / 10;
        }
        /**
         * 第二个大数入栈
         */
        System.out.println("输入第二个大数:");
        String secondNum = scanner.nextLine();
        Integer integer2 = Integer.valueOf(secondNum);
        Stack secondStack = new Stack<Integer>();
        for (int n = 0; n < secondNum.length(); n++) {
            secondStack.push(integer2 % 10);// 从个位开始压入栈
            integer2 = integer2 / 10;
        }
        /**
         * 两个大数开始做加法运算
         */
        int in = 0;// 每个位置上数字运算后进位
        int middle = 0;// 每个位置上相加所得结果
        Stack thirdStack = new Stack<Integer>();// 存取结果的栈
        while (!firstStack.isEmpty() || !secondStack.isEmpty()) {
            middle = (int) firstStack.pop() + (int) secondStack.pop() + in;
            thirdStack.push(middle % 10);
            in = middle / 10;
            middle = middle / 10;
        }
        while (!thirdStack.isEmpty()) {
            System.out.print(thirdStack.pop());
        }
    }
}

 

以上是关于java 很长的大数 如何用String 相加,相乘?的主要内容,如果未能解决你的问题,请参考以下文章

大数相乘相加相减相除

算法大数相加

js 大数相加和小数相加

java-两个大数相加

JAVA大数相减

请教:用正则表达式从一个很长的无序的字符串中,找出所有的字母出来。?