我在大学开始学习 C++。现在我们正在使用循环。我有实际作业: 任务: 输入:整数。从最右边的数字 1 中删除左边能找到的所有数字。
例如:
或者:
对于此任务,我们不能使用数组或字符串。但是我们仍然可以使用数学函数。还必须有强制性的 be 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;
}
004
和 4
是同一个数字 4
。
例如,如果您需要将
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