问题描述
以下程序将反转用户输入.但是,对于带有尾随零的数字,在打印反向数字时,零将被忽略".
The following program reverses user input. However, for numbers with trailing zeroes, the zeroes are 'ignored' when printing the reversed number.
#include<stdio.h>
int main(void)
{
int n, reversedNumber = 0, remainder;
printf("Enter an integer: ");
scanf("%d", &n);
while(n != 0)
{
remainder = n%10;
reversedNumber = reversedNumber*10 + remainder;
n /= 10;
}
printf("Reversed Number = %d\n", reversedNumber);
return 0;
}
由于用户输入的整数长度未知,我们如何打印所有尾随的零,例如:
Since the integer length of the user input is unknown, how can we print all the trailing zeros for example:
Enter an Integer: 3000
Reversed Number = 0003
推荐答案
不是.:-)
计算迭代次数,并将其作为宽度传递给对 printf
的最终调用.
Count the number of iterations and pass it to the final call to printf
as width.
#include<stdio.h>
int main(void)
{
int n, reversedNumber = 0, remainder;
printf("Enter an integer: ");
scanf("%d", &n);
{
size_t i = (0 > n);
while (n != 0)
{
remainder = n % 10;
reversedNumber = reversedNumber * 10 + remainder;
n /= 10;
++i;
}
printf("Reversed Number = %0*d\n", (int) i, reversedNumber); /* Alternatively
to the cast you can define i as int. */
}
return 0;
}
从文档:
[...]
- 可选的最小字段宽度.如果转换后的值的字符数少于字段宽度,则在字段宽度的左边(或默认情况下,如果给定了左边的调整标志,则在右边)用空格填充(默认情况下).字段宽度采用星号*(稍后描述)或非负十进制整数的形式.[...])
[...]
5 如上所述,字段宽度可以用星号表示.在这种情况下,int参数可提供字段宽度或精度.指定字段宽度[...]的参数应(按此顺序)出现在要转换的参数(如果有)之前.
5 As noted above, a field width [...] may be indicated by an asterisk. In this case, an int argument supplies the field width or precision. The arguments specifying field width [...] shall appear (in that order) before the argument (if any) to be converted.
[...]
这篇关于当整数长度未知时,保持前导零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!