gpt4 book ai didi

c++ - 添加大数字 C++ - 初始化程序失败

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:52 27 4
gpt4 key购买 nike

我正在尝试编写一个程序,允许将最多 100 位数字的两个数字相加,并使用 C++。我已经多次检查代码,但编译器告诉我在第 61 行初始化 sum 数组时出现问题。关于为什么会这样或如何修复它的任何想法?

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

void add_nums(string number1, string number2)
{
int min = (number1.length() < number2.length() ?
number1.length():number2.length());
int max = (number1.length() < number2.length() ?
number2.length():number1.length());

int *n1 = new int[max];
int *n2 = new int[max];

for (unsigned int i=0; i < number1.length(); i++)
{
n1[i] = number1.at(number1.length() - 1 -i) - 48;
}

cout << number1 << endl;

for (unsigned int i=0; i < number2.length(); i++)
{
n2[i] = number2.at(number2.length()-1 -i) - 48;
}

cout << number2 << endl;

int carry = 0;

int sum[] = new int[max];

int k=0;
for (k = 0; k < max; k++)
{
sum[k] = (n1[k] + n2[k] + carry) % 10;

if ( (n1[k] + n2[k] + carry) >= 10)
carry = 1;
else carry = 0;
}
sum[max] = carry;

for (int j= max; j >= 0; j--)
{
cout << sum[j] << endl;
}
}

int main()
{
string number1;
string number2;

cout << "Enter a number and press return (100 digits maximum): ";
cin >> number1;

cout << "Enter a number and press return (100 digits maximum): ";
cin >> number2;

add_nums(number1, number2);

return 0;
}

最佳答案

正如 Mike 已经提到的,您的问题出在这一行中:

int sum[] = new int[max];

您编码的方式是 Java 风格。

在 C(++) 中有点不同:对于编译器,无法知道您要创建的数组 $sum$ 的大小,因为 max 是在运行时计算的并且取决于输入。这意味着您有两种不同的可能性来克服这个问题:

首先,但丑陋的方法:定义一个常量最大大小,创建具有此大小的数组,稍后仅使用您需要的大小:

const int MAX_SIZE = 101;
int sum[MAX_SIZE];

其次,也是大多数情况下更好的方法:这样做,就像你之前做的几行一样,并使用指针:

int* sum = new int[max]

这会在 HEAP 上动态分配所需大小的内存。

注意!您在代码中使用了 new[],但从未使用过 delete[]。这意味着您分配了一些内存,但一旦您不再需要它,就永远不会释放它。在你的小程序中,这可能不会生效,但你应该始终小心避免它。如果您可以使用 C++11,那么使用“唯一指针”可能是最佳解决方案:

unique_ptr<int[]> n1(new int[max]);

如果最后一个引用被销毁,这些指针将自行删除。

关于c++ - 添加大数字 C++ - 初始化程序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554945/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com