按相反顺序输出数组的元素
Output the elements of an array in reverse order
用户在数组中放入未知数量的整数(动态)。程序必须以相反的顺序输出这些数字,例如:整数的顺序相反。Exmp。324125987-->423217895Exmp。123100->321,1(去掉两个0)
我不确定我是否走上了正确的道路,但我真诚地希望有人能给我一个解决方案。现在,我得到了"分段错误"的错误——这可能与数组空间有关吗?
这是我目前的代码:
int main()
{
int n,sk,rez;
int *a;
cout << "How many integers will there be? : " << endl;
cin >> sk;
a = new int[sk];
for (int i = 0; i < sk; i++)
{
cout << "Write an integer: " << endl;
cin >> n;
a[i] = n;
}
for (int i = 0; i < sk; i++)
{
// Gets amount of the digits of every integer.
int count, new_num = 0;
int* skaits;
while(a[i] > 0)
{
count++;
a[i] = a[i]/10;
}
skaits = new int [count];
for (int j = 0; j<count; j++)
{
skaits[j] = count; // Exmp. I write 324,12 , loop calculates 3 and 2 and puts that amount in an array.
// Loop to output integers in reverse order. Exmp. 324,12,5987 --> 423, 21, 7895
for (int k = 0; k<skaits[j]; k++)
{
new_num = new_num * 10 + (a[k] % 10);
a[k] = a[k]/10;
}
cout << new_num << endl;
}
}
delete []a;
return 0;
}
作为一条一般规则:尽量使代码更加模块化。我希望能找到一个函数来计算单个数字的倒数。这更容易编写,也更容易调试,因为您将两个任务分开:收集数据,反转整数。
无论如何,在代码中更深入地观察:似乎在计算了count
之后,变量a[i]
的内容已经被破坏了。。。(a[i]==0
退出while
循环)。
反转十进制数的一种简单方法:
int reverse(int n) {
int m=0;
while (n>0) {
m *= 10;
m += n%10;
n /= 10;
}
return m;
}
此处segmentation fault
发生,因为count
未初始化。我在你的程序中发现了很多错误,例如:
int count, new_num = 0;// here count is not initialized also need count=0;
int* skaits;
while(a[i] > 0)
{
count++; // without initialize how you increase count
a[i] = a[i]/10;
}// after this your number in a[i] is become 0. so what will you find
skaits = new int [count];// no need extra skaits. you have count already
最好可以使用一个函数来反转a[i]
的每个数字。
long reverse(long n) {
static long r = 0;
if (n == 0)
return 0;
r = r * 10;
r = r + n % 10;
reverse(n/10);
return r;
}
你可以这样做:
for(int i=0;i<sk;i++)
{
int new_num=reverse(a[i);
a[i]=new_num;
cout<<a[i]<<endl;
}
或者你可以像下面这样做:
for (int i = 0; i < sk; i++)
{
cout << "Write an integer: " << endl;
cin >> n;
a[i] = n;
}
for (int i = 0; i < sk; i++)
{
// Gets amount of the digits of every integer.
int reverse=0;
while (a[i] != 0)
{
reverse = reverse * 10;
reverse = reverse + a[i]%10;
a[i]= a[i]/10;
}
cout<<reverse<<endl;
}
另一种方法是,首先将每个数字设为int to string
,然后再设为reverse
。
相关文章:
- 数组元素打印的递归方法
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 数组元素更改值?
- 如何访问宏中定义的数组元素
- 将数组元素递增 1
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在 std::map 中插入数组元素
- 使用指针访问数组元素时出现意外结果
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 缺少数组元素问题
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 删除在结构 c++ 中声明的数组元素
- Getter 和 Setter 用于类 C++ 中的数组元素
- 尝试递归获取数组元素的总和
- 使用SWIG将numpy数组元素(int)传递给c++int