我正在尝试编写一个程序,允许将两个最多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;
}
答案 0 :(得分:0)
正如迈克已经提到过你的问题就在这一行:
int sum[] = new int[max];
您编写它的方式是Java风格。
在C(++)中,它有点不同:
对于编译器,无法知道要创建的数组$ sum $的大小,因为max
是在运行时计算的并且取决于输入。
这意味着您有两种不同的可能性来克服这个问题:
首先,但丑陋的方法: 定义一个恒定的最大大小,用这个大小创建数组,然后只使用你需要的大小:
const int MAX_SIZE = 101;
int sum[MAX_SIZE];
第二,大多数时候更好的方法: 这样做,就像之前做过一些行并使用指针一样:
int* sum = new int[max]
这会动态分配HEAP所需大小的内存。
Attenion!
您在代码中使用了new[]
,但从未使用delete[]
。这意味着你分配了一些内存,但永远不会自由,一旦你不再需要它。在您的小程序中,这可能不会生效,但您应始终注意避免它。
如果你可以使用C ++ 11,它可能是使用&#34;唯一指针的最佳解决方案&#34;:
unique_ptr<int[]> n1(new int[max]);
如果最后一个引用被销毁,这些指针会自行删除。
答案 1 :(得分:0)
编译此程序时出现此错误
error: array initializer must be an initializer list
你不能这样声明
int sum[] = new int[max];
你需要这一行
int sum[max]
或
int *sum = new int[max]
不要忘记删除由new
答案 2 :(得分:0)
int sum[]=new int[max]
不是C++
编码风格。而是将其用作
int* sum = new int[max]
由于您有max
的值,您也可以使用
int sum[max]
如果您使用的是前一种方法,请确保在某个时间点free
指针,以避免内存泄漏。
答案 3 :(得分:0)
int sum[] = new int[max];
不是一个好的语法。这应该是
int *sum = new int[max];
或者,更好:
std::array<int, max> sum;
首选STL而不是C风格的数组。
修改强>
这是不正确的:
sum[max] = carry;
它应该是:
sum[max - 1] = carry;
因为索引在C ++中从0开始。