我正在编写一个列出整数输入数字的程序。
示例:
Please enter an integer number: 5021
The digits are:
5
0
2
1
该程序工作正常,除非是以0结尾的数字,因为我先使用while循环(而num> 0)颠倒了数字,以便按上面显示的顺序打印数字。我希望有人可以指出我正确的方向,因为我现在似乎无法想到另一种方式:)
抱歉无法弄清楚如何在每行前面添加4个空格来添加代码(是否有另一种(更简单的)添加代码的方式?)。int main() {
int userInt; /* integer input by user */
int revInt; /* reversed integer */
printf("Please enter an integer number: ");
scanf("%d", &userInt);
/* reverse int */
revInt = reverseInteger(userInt);
/* print digits */
printDigits(revInt);
return 0;
}
int reverseInteger(int num) {
long sum = 0;
int remainder;
while(num) {
remainder = num%10; /* get last digit of number */
sum = sum*10 + remainder; /* move digits by one place in sum and add remainder of number */
num = num/10; /* remove last digit of number */
}
return sum;
}
void printDigits(int num) {
int remainder;
printf("The digits are:\n");
while(num) {
remainder = num%10; /* get last digit of number */
printf("%d \n", remainder); /* print last digit */
num = num/10; /* remove last digit of number */
}
}
答案 0 :(得分:3)
int
中的最大位数很小,因此在这种情况下您可以安全地使用递归:
#include <stdio.h>
#include <stdlib.h>
void
print_digits(unsigned n) {
div_t q = div(n, 10);
if (q.quot > 0) print_digits(q.quot);
printf("%d\n", q.rem);
}
int main() {
print_digits(50210);
return 0;
}
5
0
2
1
0
答案 1 :(得分:3)
在ReverseInteger的代码中,变量 remainder 始终保留您输入的数字的最后一位数字(即使末尾有零)。所以你的功能已经准备就绪,我们可以稍微调整一下:
void reverseIntegerAndPrint(int num) {
int remainder;
while(num) {
remainder = num%10; /* get last digit of number */
printf("%d \n", remainder); /* prints last digit!! */
num = num/10; /* remove last digit of number */
}
return;
}
答案 2 :(得分:0)
您需要在[{1}}中存储循环传递的次数,并在循环reverseInteger
函数时重复使用此信息。
除了在printDigits
中反转整数之外,您还可以将所有数字以相反的顺序存储在数组中,并在另一个整数变量中存储数字位数。然后,您可以从结尾开始逐个元素地打印数组元素(数字)。
答案 3 :(得分:0)
在还原号码之前,请执行以下操作:
while(number%10 == 0)
{
number /= 10;
}
...//invering code here
答案 4 :(得分:0)
问题在于reverseInteger(1) == reverseInteger(10) == reverseInteger(100) == reverseInteger(1000) == ...
,因此,一旦您使用此功能(返回int
),您就已经丢失了所需的信息。一种解决方案是首先计算尾随零,导致类似这样的事情(假设为userInt > 0
):
int numTrailingZeros = 0;
while(!(userInt % 10)) {
++numTrailingZeros;
userInt /= 10;
}
revInt = reverseInteger(userInt);
printDigits(revInt);
while(numTrailingZeros) {
printf("0 \n");
--numTrailingZeros;
}
答案 5 :(得分:0)
也可以将其转换为字符串并打印保留:
#include "stdio.h"
#include "string.h"
int main(void)
{
int i,j;
char s[20];
scanf("%i", &i);
sprintf(s, "%i", i);
for(j=strlen(s); j>0; j--) {
printf("%c \n", s[j-1]);
}
}