为什么它在循环c ++

时间:2017-04-16 18:28:10

标签: c++

我正在尝试分隔用户输入的数字的数字。我得到相反顺序的数字。例如,如果输入是12345,我得到5 4 3 2 1作为输出。

在查找数字的二进制时我遇到了类似的情况。  你能解释一下为什么会出现这个问题并轻松解决这个问题。

#include<iostream>
using namespace std;
int main()
{
cout << "Enter an integer " << endl;
int number;
cin >> number;

int n;
n = number%10;
number = number/10;
cout<<n<<'\n';
while(n!=0)
{   
    n = number%10;
    number = number/10;
    if(n==0)
        {
            break;
        }
    cout << n << '\n';
}
}

如果输入为12345

输出为:

5
4
3
2
1

3 个答案:

答案 0 :(得分:1)

您没有使用正确的逻辑来完成这项工作。 当你使用模数运算符然后它给出余数,如果用10执行模数,它将是最后一位数。然后你打印它,所以它将始终是最后一位数,然后你将数字除以10,数字是整数类型,因此它将删除最后一位数字,然后再次开始该过程。

您可以使用数组并打印它。 但是在这里你使用的是一个简单的变量,所以你需要先反转这个数字。

我已经编写了相同的代码,它的工作确实很好。

#include<stdio.h>

void main()
{
  long int number,n = 0;
  int temp = 0;

  scanf("%ld",&number);
  while(number != 0)
  {
    temp = 0;
    temp = number % 10;
    n = (n * 10) + temp;
    number = number / 10;
  }
  while(n != 0)
  {
    temp = n % 10;
    printf("%d\n", temp);
    n = n / 10;
  }
}

答案 1 :(得分:0)

这是因为您的算法适用于数字较小的“后”端。

简单就是这样!

 15 % 10 = 5
 10 % 10 = 1

这就是为什么它会打印5 1而不是1 5。

因此,如果要将数字打印为1 5,则只需将这些值推送到数组中,然后以相反的顺序打印数组。

答案 2 :(得分:0)

正如@GhostCat所说。数学在这里工作。我建议你勾画你的算法,这可能会告诉你什么是错误的&#39;这里。 ^^

您能告诉我们您期望的最终输出吗? 如果它只是相同的顺序,那么我可能是一个数组,每个数字都有正确的索引。

你的代码在while循环条件下也有缺点;输入包含&#39; 0&#39;在任何位置的数字...你的代码将破裂。这是因为你的循环会运行一段时间,因为验证数字将是任何数字,但不是0,这是没有意义的。此循环条件应如下while(number >= 0)