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 相加,相乘?的主要内容,如果未能解决你的问题,请参考以下文章