可能重复:
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 ++编译器。
答案 0 :(得分:5)
由于C和C ++不提供支持大数字的本机类型,因此调用atoi()来解析这些数字是没有意义的。 atoi()
返回原生int
,在32位平台上的上限为2,147,483,647
。
您可以使用众多bignum libraries中的一个,例如GMP。
答案 1 :(得分:0)
我认为,除了使用一些数学库之外,最好的变体是将这些数字拆分为具有一些固定限制的int
数组。然后使用基本的数学乘法方法执行乘法。不要忘记溢出。
答案 2 :(得分:0)
乘以大数是非常的 困难,但我们可以做到这一点 应用对数 乘以两个数的公式 现在我们要知道我们是怎么做的 派生出两个数字的乘积' 对数。
让我们考虑a,m和n是正实数,但a不等于1,这意味着'a'属于R+ – {1}
。 m和n对数a的对数分别为x和y,满足ax等于m,ay等于n条件。
loga (m.n) = x + y
As we already know x = loga m and y = loga n.
loga (m.n) = loga m + loga n
两个值相乘的对数等于相同值的对数的总和。现在,相同的对数基数可以通过添加这些值的对数来帮助我们将两个大数相乘。如果您没有计算器,只需使用对数表帮助即可执行此操作。
答案 3 :(得分:0)
使用atoi()也没有用,因为数字本身不适合整数数据类型。
你必须模拟你在小学时所采用的方法。
121
*23
----
363
242*
----
2783
实施留作练习。您还需要知道如何添加大数字。