我正在尝试分隔用户输入的数字的数字。我得到相反顺序的数字。例如,如果输入是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
答案 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)
。