【问题标题】:Print last digits of an integer gradually?逐渐打印整数的最后一位?
【发布时间】:2016-03-29 14:49:06
【问题描述】:

我正在尝试打印用户输入整数的最后一位。 例如,如果用户输入 5432 我的输出是 2 32 432 5432。 我已经设法使用while循环为此编写代码,但是我不明白为什么我的循环没有终止,请帮我终止它?

void main()
{
    //declare variables
    int input, output, modulu = 10;
    //read input from user
    cout << "Please enter a number: ";
    cin >> input;
    int test = input % modulu;   // test checks if all the number has been printed
                                 //disect number
    while (test > 0);
    {
        output = input % modulu;
        modulu = modulu * 10;
        cout << endl << output << endl;
        test = input % modulu;
    }
}

【问题讨论】:

  • 您的 while 循环不会终止,因为 test 从不采用小于或等于零的值。您可能想要修改循环条件。
  • @oladodja gbasamassi,你能请教什么吗?我尝试了其他条件,但没有成功

标签: c++ loops while-loop logic


【解决方案1】:

test 总是 > 0 对于任何输入 > 0

你可以用不同的循环来达到同样的效果:

int input, modulu = 1;
cout << "Please enter a number: ";
cin >> input;
do {
    modulu *= 10;
    cout << endl << (input % modulu) << endl;
} while ((input % modulu) != input);

【讨论】:

  • 谢谢!这几乎可以工作,但是它不打印第一个数字 void main() { //declare variables int input, output, modulu = 10; //从用户cout读取输入> 输入;智力测验; // 测试检查是否所有的数字都被打印了 //disect number do { output = input % modulu;模数 = 模数 * 10; cout
  • @FaresAlGhazy 我不知道你为什么破坏了我的工作代码并问为什么它不起作用
【解决方案2】:

只是 测试=输入/模数; 而不是 test = input % modulu;

【讨论】:

    【解决方案3】:

    对于初学者来说,while 语句后有一个分号。

    while (test > 0);
                   ^^^
    

    所以如果输入的数字的最后一位不等于0,则循环是无限的。

    但是,如果您删除分号,则条件无效,因为 test == 0 仅适用于最后一位等于 0 的情况。

    考虑到 C++ 中的 main 应具有返回类型 int

    程序可以如下所示

    #include <iostream>
    
    int main()
    {
        while ( true )
        {
            const unsigned int Base = 10;
    
            std::cout << "Please enter a non-negative number (0-exit): ";
    
            unsigned int x;
    
            if ( !( std::cin >> x ) || x == 0 ) break;
    
            unsigned int y = x;
            unsigned int modulo = 1;
    
            do
            {
                modulo *= Base;
    
                std::cout << x % modulo << std::endl;
            } while ( y /= Base );
    
            std::cout << std::endl;
        }
    }    
    

    如果例如进入

    123456789
    0
    

    那么输出会是这样的

    Please enter a non-negative number (0-exit): 123456789
    9
    89
    789
    6789
    56789
    456789
    3456789
    23456789
    123456789
    
    Please enter a non-negative number (0-exit): 0
    

    【讨论】:

      【解决方案4】:

      你的第一个问题在这里:

      while (test > 0);
      

      ; 终止 while 语句,代码将永远停留在 while 中。换句话说 - 下面的所有代码都不会执行。删除;

      您的第二个问题是您处理test 的方式 - 不要取模,而是除以 10。像这样:

      int main()
      {
          //declare variables
          int input, output, modulu = 10;
          //read input from user
          cout << "Please enter a number: ";
          cin >> input;
          int test = input;  // <------------- Just make test equal to the input
          while (test > 0)   // <------------- The ; removed
          {
              output = input % modulu;
              modulu = modulu * 10;
              cout << endl << output << endl;
              test = test / 10;       // <----------- Divide by 10
          }
      
          return 0;
      }
      

      请注意,上面的代码存在一些零问题,例如1001 将输出 1 1 1 1001 而不是 1 01 001 1001

      您可以通过使用 string 而不是 int 的完全不同的方法来解决此问题

      喜欢:

      int main()
      {
          //declare variables
          string input;
      
          //read input from user
          cout << "Please enter a number: ";
          cin >> input;
          cout << input << endl;
          int size = input.size();
          int tmp = size;
          while (tmp >= 0)
          {
              for (int t = tmp; t < size; t ++) cout << input[t];
              cout << endl;
              --tmp;
          }
      
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多