两个 long long int 相乘 C
我正在编写一个 C 程序作为家庭作业的一部分,其中我必须获得两个长数字的乘积,这两个数字被视为字符串。例如:123456789021 和 132456789098。由于它被视为字符串,因此我将它们转换为 long long int 进行乘法。但最终的结果将非常大(我猜比 long long int 还要大)。谁能建议我一种执行此乘法的方法?
I am working on a program in C as a part of Homework in which I have to get the product of two long numbers which are taken as character string. eg: 123456789021 and 132456789098. Since it is taken as a string, I converted them to long long int for the multiplication. But the resulting product will be very large(larger than long long int I guess). Can anyone please suggest me a method to perform this multiplication?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
一种方法是:考虑如何在纸上手工将这些数字相乘。在 C 中实现此方法。您将必须发现:
0 <= d < 10
Here's one approach: Consider how you would multiply these numbers by hand, on paper. Implement this method in C. You will have to discover:
0 <= d < 10
通常表示为字节数组的大整数。您可以查看 Microsoft 在 DLR 中的 BigInteger 实现。我认为他们使用了 Knuth 开发的算法
usually big integers represented as byte arrays. You can look at Microsoft's BigInteger implementation in DLR. I think they've used algorithms developed by Knuth
检查这个 BigInteger 库 和 来自《七人世界》的非常基本的示例代码。
如果您对我用 C 编写的一些自制代码(仅乘法)感兴趣:
这在我参加过的一些早期编程竞赛中有效;)但如果您正在寻找更快的乘法算法,您可以实现 Karatsuba 算法,我个人现在在实时比赛中使用这个。
Check this BigInteger library and a very basic sample code from World of Seven.
If you are interested in some of my home cooked codes in C (only multiplication) :
This works in some of the earlier programming contests I had participated ;)But if you are looking for even faster multiplication algorithm you can Implement Karatsuba algorithm,I personally use this now in real time contest.
嘿伙计,看看这个,我昨天刚刚完成它作为我作业的一部分:
Hey man,check this out,i just completed it yester day as a part of my homework:
您可以使用大整数算术库,维基百科此处有一个列表。
You can use a library for large integer arithmetik, Wikipedia has a list here.
另一种方法是将数字作为浮点数/双精度数相乘,并在显示结果时去掉小数点。
Another approach would be to multiply the numbers as float/double and stip off the decimal when displaying the results.