首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乘法字符串[包含整数],输出也存储在字符串中,如何?

乘法字符串[包含整数],输出也存储在字符串中,如何?
EN

Stack Overflow用户
提问于 2011-04-25 05:49:15
回答 4查看 2.1K关注 0票数 1

可能重复:

Inputting large numbers in c++?

Arbitrary-precision arithmetic Explanation

我需要乘两个巨大的整数,比如:

代码语言:javascript
复制
 a=1212121212121212121212121212121212121212121212121212;
 b=1212121212121212121212121212121212121212121212121212;    

我认为在C和C++中没有数据类型可以容纳这么大的整数,所以我想将它保持为字符串格式,例如:-

代码语言:javascript
复制
char *number1="1212121212121212121212121212121212121212121212121212";
char *number2="1212121212121212121212121212121212121212121212121212";

在乘法期间,我借助atoi()函数将其转换为字符串,如下所示:

代码语言:javascript
复制
atoi(number1)*atoi(number2);

和往常一样,这个乘法的输出很明显是巨大的,所以我需要用字符串格式来改变输出。

我知道有一个itoa()函数将整数转换为字符串,但它并不兼容所有编译器。有人能告诉我在这种情况下我该怎么做吗?

我正在使用Ubuntu-10.04和g++编译器。

EN

回答 4

Stack Overflow用户

发布于 2011-04-25 05:54:43

由于C和C++不提供支持大数字的本机类型,调用atoi()解析这些数字是没有意义的。atoi()返回一个在32位平台上以2,147,483,647为上限的本地int

您可以使用众多的bignum libraries之一,例如GMP

票数 5
EN

Stack Overflow用户

发布于 2011-04-25 05:55:19

我认为,除了使用一些数学库之外,最好的变体是将这些数字拆分为具有一定限制的int数组。然后用基本的数学乘法方法进行乘法。别忘了溢出。

票数 0
EN

Stack Overflow用户

发布于 2011-04-25 05:55:29

乘大数是很困难的,但是我们可以用两个数公式的乘法的对数来做,现在我们将知道如何推导出两个数的对数的乘积。

让我们考虑a,m和n是正实数,但a不等于1,这意味着‘a’属于R+ – {1}。M和n对基数a的对数分别为x和y,满足ax等于m,y等于n个条件。

代码语言:javascript
复制
loga (m.n) = x + y

As we already know x = loga m and y = loga n.

loga (m.n) = loga m + loga n

两值乘法的对数等于同一值的对数之和。同样的对数基础现在可以帮助我们把这两个大数相乘,把这些值的对数相加。如果您没有计算器,只需使用对数表帮助来执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5775606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档