可能重复:
Inputting large numbers in c++?
Arbitrary-precision arithmetic Explanation
我需要乘两个巨大的整数,比如:
a=1212121212121212121212121212121212121212121212121212;
b=1212121212121212121212121212121212121212121212121212; 我认为在C和C++中没有数据类型可以容纳这么大的整数,所以我想将它保持为字符串格式,例如:-
char *number1="1212121212121212121212121212121212121212121212121212";
char *number2="1212121212121212121212121212121212121212121212121212";在乘法期间,我借助atoi()函数将其转换为字符串,如下所示:
atoi(number1)*atoi(number2);和往常一样,这个乘法的输出很明显是巨大的,所以我需要用字符串格式来改变输出。
我知道有一个itoa()函数将整数转换为字符串,但它并不兼容所有编译器。有人能告诉我在这种情况下我该怎么做吗?
我正在使用Ubuntu-10.04和g++编译器。
发布于 2011-04-25 05:54:43
由于C和C++不提供支持大数字的本机类型,调用atoi()解析这些数字是没有意义的。atoi()返回一个在32位平台上以2,147,483,647为上限的本地int。
您可以使用众多的bignum libraries之一,例如GMP。
发布于 2011-04-25 05:55:19
我认为,除了使用一些数学库之外,最好的变体是将这些数字拆分为具有一定限制的int数组。然后用基本的数学乘法方法进行乘法。别忘了溢出。
发布于 2011-04-25 05:55:29
乘大数是很困难的,但是我们可以用两个数公式的乘法的对数来做,现在我们将知道如何推导出两个数的对数的乘积。
让我们考虑a,m和n是正实数,但a不等于1,这意味着‘a’属于R+ – {1}。M和n对基数a的对数分别为x和y,满足ax等于m,y等于n个条件。
loga (m.n) = x + y
As we already know x = loga m and y = loga n.
loga (m.n) = loga m + loga n两值乘法的对数等于同一值的对数之和。同样的对数基础现在可以帮助我们把这两个大数相乘,把这些值的对数相加。如果您没有计算器,只需使用对数表帮助来执行此操作。
https://stackoverflow.com/questions/5775606
复制相似问题