我在Uni开始了C++。现在我们使用循环。我有实际的任务:任务: 输入:整数。从最右边的数字1中删除所有可以在左边找到的数字。
举例来说,您可以:
- 输入:314195
- 结果:95
或者:
- 输入45131005
- 结果:005
对于这个任务,我们不能使用数组或字符串。但是我们仍然可以使用数学函数。此外,必须有强制性的while/do while条件。
我已经写了代码,使用%和/查找第一个数字1之前的值。然而,结果它不能正常工作,当我输入431004时-它只显示4,而不是004。下面是我的代码:
#include <iostream>
using namespace std;
int main()
{
int number;
cout << endl << "Enter integer number: ";
cin >> number;
int result;
int buffer = 0;
int divider = 10;
int check = 1;
do {
result = buffer;
buffer = number % divider;
divider = divider * 10;
check *= 10;
} while ((buffer / (check / 10)) != 1);
cout << endl << "Result = " << result;
return 0;
}
字符串
2条答案
按热度按时间xmq68pz91#
004
和4
是相同的数字4
。例如,如果您需要将
4
输出为004
,则使用在头文件<iomanip>
中声明的manupulatorsstd::setfill
和std::setw
。另外,你应该将变量
number
声明为一个无符号整数类型,而不是int
类型。否则你需要考虑数字的符号。这里是一个演示程序,展示了如何使用操纵器获得预期的结果。
字符串
程序输出可能类似于
型
1zmg4dgp2#
虽然可以使用
std::setw
和std::setfill
的组合来完成这项工作,但我觉得这几乎是一个伪装的数组--基本上只是使用流的缓冲区作为数组来保存中间结果。如果你想避免这种情况,你可以做一些不同的事情。举个例子:
字符串
正如预期的那样,结果是:
005
--而且(尽管缺少缓冲会使它有点慢)这并不依赖于系统的其他部分能够做任何比将字符写入标准输出更多的事情。作为奖励,它实际上比(大多数)使用std::setw
和std::setfill
的代码更短更简单。