我在分配时遇到一些问题:删除从最右边的数字 1 开始可以在左侧找到的所有数字

问题描述 投票:0回答:1

我在大学开始学习 C++。现在我们正在使用循环。我有实际作业: 任务: 输入:整数。从最右边的数字 1 中删除左边能找到的所有数字。

例如:

  • 输入:314195
  • 结果:95

或者:

  • 输入45131005
  • 结果:005

对于此任务,我们不能使用数组或字符串。但是我们仍然可以使用数学函数。还必须有强制性的 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;
}
c++ loops while-loop do-while
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.