提问人:Dmitry Finogenov 提问时间:11/13/2023 更新时间:11/13/2023 访问量:68
我在分配方面遇到了一些问题:从最右边的数字 1 中删除所有可以在左侧找到的数字
I have some problems with assignment: Remove all digits that can be found on the left from most right digit 1
问:
我在大学里开始学习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;
}
答:
0赞
Vlad from Moscow
11/13/2023
#1
004
并且是 ame 编号。4
4
例如,如果您需要输出 as,请使用 manupulators 并在 header 中声明。4
004
std::setfill
std::setw
<iomanip>
此外,您还应该将变量声明为具有无符号整数类型而不是类型。否则,您需要考虑数字的符号。number
int
这是一个演示程序,展示了如何使用机械手获得预期的结果。
#include <iostream>
#include <iomanip>
int main()
{
const unsigned int Base = 10;
unsigned long long int number;
std::cout << "Enter a non-negative integer number: ";
if (std::cin >> number)
{
unsigned long long int result = 0;
unsigned long long int multiplier = 1;
int n = 0;
while ( number && number % Base != 1 )
{
result += ( number % Base ) * multiplier;
++n;
multiplier *= Base;
number /= Base;
}
std::cout << "Result = "
<< std::setw( n ) << std::setfill( '0' ) << result << std::endl;
}
}
程序输出可能如下所示
Enter a non-negative integer number: 431004
Result = 004
0赞
Jerry Coffin
11/13/2023
#2
虽然可以使用 和 的组合来完成这项工作,但在我看来,这几乎是一个伪装的数组——你基本上只是使用流的缓冲区作为数组来保存中间结果。std::setw
std::setfill
如果你想避免这种情况,你可以做一些不同的事情。举个例子:
#include <iostream>
void cvt(int input) {
if ((input != 0) && ((input % 10) != 1)) {
cvt(input / 10);
std::cout.put('0' + input % 10);
}
}
int main() {
cvt(45131005);
std::cout << '\n';
}
正如预期的那样,结果是:--并且(尽管缺乏缓冲会使其速度有些慢)这并不依赖于系统的其余部分能够做任何事情,而只能将字符写入标准输出。作为奖励,它实际上比(大多数)使用 和 之类的代码更短、更简单。005
std::setw
std::setfill
评论
find_last_of
'1'