如何输入不同的数字作为数组的不同元素?

How to input different numbers as different elements of array?

这个程序基本上是将 4568 之类的数字反转为 8654。 它没有接受正确的输入。我知道其他方法可以做到这一点,但你能建议我如何使这个程序工作吗?

#include<iostream>

#include<math.h>

using namespace std;

int main()
{
    int num[25];
    int a, b, c, d;

    cout<<"Enter the no. which you want to reverse:\n";
    cin>>num;

    a = (int)sizeof(num)/4;
    
    cout<<"The swapped no. is:\n";

    for (b = a-1; b <= 0; b--)
    {
        cout<<num[b];
    }

    return 0;

}

您的代码有一些错误。

  1. a = (int)sizeof(c) / 4; 会将 a 的值初始化为 1(在 sizeof(int) 等于 4 的平台上)。
  2. for 循环无限迭代。这是因为 b 被初始化为零(如上所述和 1 - 1 = 0)并且停止条件设置为 b <= 0 并且由于您在每次迭代中都执行 b-- ,停止条件永远为真。
  3. cout << num[b]; 语句不会反转存储在 c 变量中的输入整数。您只是打印出数组中的一堆元素(可能为 0 也可能不是 0)。

一种可能的解决方案是使用 std::string.

#include<iostream>
#include <string>

//using namespace std;  // Try not to use this. (see additional)

int main()
{
    int c;

    std::cout << "Enter the no. which you want to reverse:\n";
    std::cin >> c;

    std::string integerString = std::to_string(c);    // Convert the integer to a string.
    std::string reversed(integerString.rbegin(), integerString.rend());    // Use std::string s reverse iterators to initialize the reversed string.

    std::cout << "The swapped no. is:\n" << reversed;

    return 0;

}

补充:Why is "using namespace std;" considered bad practice?


编辑:至于你的评论,是的,我们可以使用一些简单的数学来完成它。

#include <iostream>

int main()
{
    int c = 0;
    std::cin >> c;

    int biggestPower = 1;
    for (; biggestPower < std::numeric_limits<int>::max(); biggestPower *= 10)
        if (c < biggestPower) break;

    int index = 0;
    int sum = 0;
    int list[25] = {};
    for (; biggestPower > 0 && index < 25; biggestPower /= 10)
    {
        list[index] = (((c / biggestPower) * biggestPower) - sum) / biggestPower;
        sum += ((c / biggestPower) * biggestPower) - sum;
        index++;
    }

    for (index--; index > 0; index--)
        std::cout << list[index];
}

例如,让我们使用 125 作为输入。
我们首先寻找可以放入输入值的 10 的最大幂(基本上是 10 的最大幂 < 输入值)。
然后我们可以使用它来获得三个值,{1, 12, 125} 使用等式 input value / powerOf10。但正如您所见,我们有 12 和 125 这样的值,这是有问题的。
要删除它,我们将第一个值(在本例中为 1)乘以它的位置值(100),这样我们就得到了新列表 { 100, 120, 125 }。现在我们只需要从下一个值中减去前一个值(除了第一个)并将它除以它的位值,这就得到了单独的数字 { 1, 2, 5 }。
我们可以用它来 return 相反。