java中如何将两个任意长度的数字相加?
java中如何将两个任意长度的数字相加?
例如,在java中,long大小是64位。所以最大范围是 -9223372036854775808 到 9223372036854775807。我对吗?
因此,如果我们想添加一个大于此值的数字,如下所示,我会收到错误
“整数太大”
长a = 9223372036854775807L;
长b = 9223372036854775808L;
在C中,我们可以将这些数字作为字符数组,通过遍历每个字符的地址并使用某种数据结构,我们可以将两个任意大小的数字相加。
如何做到这一点java.我们可以遍历String中每个字符的地址吗?
感谢您的回复。
我尝试通过将数字作为字符串传递并从末尾添加每个字符来进行编码。它对我来说效果很好。
使用 BigInteger 和我上面指定的方法将两个非常大的数字相加(从末尾添加每个字符并将余数存储在临时变量中并继续)之间有什么大的区别吗? BigInteger的底层机制与我的代码相同(从末尾添加每个字符)吗?
谢谢。
How to add two numbers of any length in java?
Say for example, in java long size is 64 bit. So the maximum range is -9223372036854775808 to 9223372036854775807. Am i right?
So if we want to add a number which is greater than this like below, i got a error
" Integer Number too large"
long a = 9223372036854775807L;
long b
= 9223372036854775808L;
In C, we can take those numbers as char array, by traversing through the address of each char and use some data structure, we can add two numbers of any size.
How to do it java. Can we traverse through the address of each character in String.
Thanks for your responses.
I have tried to code by passing the numbers as string and add each character from the end. It works fine for me.
Is there any big difference between the addition of two very large numbers using BigInteger and the method, i specified above (add each character from end and store remainder in temporary variable and goes on).
Is the underlying mechanism of BigInteger is same as my code(add each character from end)?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
您可以使用
BigInteger
< /a>.BigInteger
可以让您处理任意大小的数字,但与long
或int
相比,您会损失相当多的性能。You can use a
BigInteger
.The
BigInteger
will let you work with numbers of any size, but you lose a considerable amount of performance overlong
orint
.实际上,如果您只需要运行此操作一次(用户输入两个数字,然后返回结果),那么使用 BigInteger 就可以了。但如果您需要多次执行加法运算,您实际上可以使用您自己的大整数实现。当我参加 ACM 比赛时,我们经常使用我们自己的基于 char 数组的实现(在 C++ 中)。我建议使用以下代码。假设有两个整数数组A和B。A[0]和B[0]存储对应编号的镜头。 A[i] 和 B[i] 存储数字本身。 A[1] 和 B[1] 是最低有效数字。因此数字 1234 将对应于这样一个数组:{4,4,3,2,1}。
现在,假设我们想要对这些数字求和并以相同的格式将它们存储在数组 C 中。以下是您可以使用的代码示例:
该代码使用简单的算术加法规则,并且应该比
BigInteger
一般实现快得多。享受使用它的乐趣。Actually, if you just need to run this operation once (user enters two numbers, and gets the result back), using
BigInteger
is fine. But if you need to perform the addition operation many times, you could use really your own implementation of big integer. When I was competing in ACM matches, we often used our own implementations based on char arrays (in C++). I suggest the following code. It is assumed that there are two arrays of integers, A and B. A[0] and B[0] store the lens of the corresponding numbers. A[i] and B[i] stores the digits themselves. A[1] and B[1] are the least significant digits. Therefore the number 1234 would correspond to such an array: {4,4,3,2,1}.Now, suppose we want to sum these numbers and store them in array C in the same format. Here is an example of code, that you could use:
That code uses the simple rules of arithmetic addition and should work significantly faster than the
BigInteger
general implementation. Have fun with using that.使用 BigInteger。
这里是一个示例。
示例代码(基于上面的链接)-
Use BigInteger.
Here is an example.
Example code (based on above link) -
查看 BigInteger 类。它将能够对非常大的数字执行您正在寻找的操作。
http://download.oracle.com/ javase/1.4.2/docs/api/java/math/BigInteger.html
Check out the
BigInteger
class. It will be able to perform the operations you are looking for on really large numbers.http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html
例如,不同之处在于您可以使用更大的基数。假设基数是 10000,而不仅仅是 10。当我之前的答案的代码修改如下时:
在这种情况下,代码运行速度快 4 倍(因为虚拟机在算术运算中没有区别,因为它们依赖于仅常数)。此外,这意味着整数数组将缩小 4 倍。这导致的唯一问题是如何格式化输出。
The difference is that you could use a larger radix, for example. Suppose the radix is 10000, not just 10. When the code of my previous answer would be modified like this:
In that case the code runs 4 time faster (since there is no difference for the virtual machine in arithmetic operations, since they depend on the constant only). Also, this means, that the array of integers will be 4 times smaller. The only problem this causes is how to format the output.
创建一个堆栈类并从用户处获取数字作为字符串,并将它们转换为字符串并将它们推入堆栈。
在这里,我编写了两个大数相加的完整代码。还包括堆栈类。
只需输入 cmd javac mystack.java 然后输入 java mystack
Create a stack class and get numbers as string from user and convert them into string and push them into stacks.
Here I've written the full code for the addition of two large numbers. stack class also included.
Just type in cmd javac mystack.java then java mystack
导入 java.math.BigInteger 可以让您处理任何大小的数字,
import java.math.BigInteger will let you work with numbers of any size,