如何输入不同的数字作为数组的不同元素?
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;
}
您的代码有一些错误。
a = (int)sizeof(c) / 4;
会将 a
的值初始化为 1(在 sizeof(int)
等于 4 的平台上)。
- for 循环无限迭代。这是因为
b
被初始化为零(如上所述和 1 - 1 = 0)并且停止条件设置为 b <= 0
并且由于您在每次迭代中都执行 b--
,停止条件永远为真。
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 相反。
这个程序基本上是将 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;
}
您的代码有一些错误。
a = (int)sizeof(c) / 4;
会将a
的值初始化为 1(在sizeof(int)
等于 4 的平台上)。- for 循环无限迭代。这是因为
b
被初始化为零(如上所述和 1 - 1 = 0)并且停止条件设置为b <= 0
并且由于您在每次迭代中都执行b--
,停止条件永远为真。 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 相反。