具有非常非常大数字的算术运算
arithmetic operations with a very very large numbers
我需要编写一个执行算术运算的程序 但是我必须用非常非常大的数字来做,例如 2837456897658923563425345 + 23784623874623874682736478236
因为数字本身太大了,所以我把它们作为一个字符串保存 我只是无法弄清楚当我无法将这些数字移动到变量时如何做简单的事情,例如加减法,因为它们太大了
您不必使用诸如GNU GMP之类的外部库,但是最好使用它们。但是,您仍然可以做这样的事情。
让我们总结一下15467985611234679845178946510379845612546541238708和67467985611412679845878946783212365212043542388978。结果当然会829359712464735970057893294422108246883627686,我们可以很容易地看到这一点。(哈哈(
现在,让我们跳转到代码。首先将数字分成更小的部分。假设 5 个 10 秒并对其进行数学计算。现在让我们看看输出是怎么说的。
#include <iostream>
using namespace std;
int main()
{
long bigNumber1[5] = { 1546798561, 1234679845, 1789465103, 7984561254, 6541238708 };
long bigNumber2[5] = { 6746798561, 1412679845, 8789467832, 1236521204, 3542388978 };
long tempSum = 0;
int carry = 0;
long sum[5] = {0, 0, 0, 0, 0};
for (int i = 4; i >= 0; i--)
{
tempSum = bigNumber1[i] + bigNumber2[i] + carry;
if (i == 0)
sum[i] = tempSum;
else
sum[i] = tempSum % 1000000000;
carry = tempSum / 1000000000;
}
for (int i = 0; i < 5; i++)
cout << sum[i];
}
输出:
829359712464735970057893294422108246883627686
似乎它正在工作。 :)
但是,您仍然可以使用诸如GNU GMP之类的基本库来更轻松地实现此目的。
祝你好运,玩得开心!
方法2:由于您也要求对不同的长度数字求和。我做了一些不同的算术。
这次让我们总结一下,
15467985611234679845178946510379845612546541238708
+__67467985611412679845878946783212365212043542388
15535453596846092525024825457163057977758584781096
这是它的代码:
#include <iostream>
using namespace std;
int main()
{
int num1[255], num2[255], sum[255];
char s1[255], s2[255];
int l1, l2;
cin >> s1 >> s2;
for (l1 = 0; s1[l1] != ' '; l1++)
num1[l1] = s1[l1] - '0';
for (l2 = 0; s2[l2] != ' '; l2++)
num2[l2] = s2[l2] - '0';
int carry = 0;
int k = 0;
int i = l1 - 1;
int j = l2 - 1;
for (; i >= 0 && j >= 0; i--, j--, k++)
{
sum[k] = (num1[i] + num2[j] + carry) % 10;
carry = (num1[i] + num2[j] + carry) / 10;
}
if (l1 > l2)
{
while (i >= 0)
{
sum[k++] = (num1[i] + carry) % 10;
carry = (num1[i--] + carry) / 10;
}
}
else if (l1 < l2)
{
while (j >= 0)
{
sum[k++] = (num2[j] + carry) % 10;
carry = (num2[j--] + carry) / 10;
}
}
else
{
if (carry > 0)
sum[k++] = carry;
}
for (k--; k >= 0; k--)
cout << sum[k];
return 0;
}
输出:
15535453596846092525024825457163057977758584781096
不出所料。现在,您几乎可以对任何您想要的东西求和。我建议你理解代码。
享受吧!
你可能想使用一个bignum库 - 例如GNU GMP。
C++可以处理相当大的数字 - 足以满足大多数目的。但是对于大于本机类型可以处理C++数字,您要么需要编写自己的代码来对这些类型进行数学运算,要么仅使用现有库(推荐(。
- 算术运算的结果类似于:C浮点变量中的1/3
- 更快的C++算术运算
- 为什么循环体中的一个基本算术运算执行得比两个算术运算慢
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 如何在 C++ 中计算字符串的算术运算
- 复数的算术运算
- 具有非常非常大数字的算术运算
- 如何使用C++中的处理器指令来实现快速算术运算
- boost::spirit::x3 phrase_parse 在进入 Vector 之前进行算术运算
- C++中混合数据类型的算术运算
- C++:编译器是否优化整数 + 浮点算术运算?
- 如何在特征中对二维数组的列执行简单的算术运算
- 使用数字列表和算术运算获取目标数字
- C++:“enable_if”用于限制支持特定算术运算的类型
- 如何正确避免 SIGFPE 和算术运算溢出
- 编译器用于编译 128 位整数的基本算术运算的技巧
- 将临时值存储为某种数据类型时,算术运算的标准规则是什么
- 相同的算术运算在 C++ 和 Python 中给出不同的结果
- 如何对非常大的数字进行算术运算
- 在C/ c++中对非常大的静态数组进行算术运算