您能否定义要从C中的位数打印的最小位数和最大位数?

时间:2018-11-05 11:18:15

标签: c formatting printf

例如,我要打印最多8位数字(零被截断)和最少3位数字(如果小于3,则填充0)。像这样:

int x = 3;
printf("%max/min d", x)

将打印

003

int x = 1674;
printf("%max/min d", x)

将打印

1674

int x = 840683028573;
printf("%max/min d", x)

将打印

83028573

可以做到吗?

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

printf("%03d", x % 100000000);

%03d告诉printf在左边填充零,直到输出至少3个字符长。

另一部分相当简单,您想从右边最多输入8个吗?看看其余的。

如果您的输入不适合整数,只需将int替换为long long,然后将%03d替换为%03lld,因为lld是说明符long long int(或ldlong int)。

所有这些都假设您的值始终严格为正(在这种情况下,您还可以使用unsigned变量,其中用d代替说明符u)。如果您对值进行了签名,并且希望最终输出为8个字符长(包括减号),则可以简单地应用条件语句:

printf("%03d", (x < 0 ? x % 10000000 : x % 100000000));

答案 1 :(得分:0)

您可以编写一个简单的函数来完成此操作:
-使用ceillog计算数字中的位数
-使用long long int来存储值并执行算术以获得正确的结果
-使用正确的转换说明符%lld打印值

#include <stdio.h>
#include <math.h>

#define min_length  3
#define max_length  8

void PrintDigits(long long int x)
{
    int noOfDigits = ceil(log10(x));
    if(noOfDigits < min_length)
        printf("%03lld\n", x % 1000000);
    else if (noOfDigits > max_length)
        printf("%lld\n", x % 100000000);

}

int main()
{

   long long int x = 3;
   PrintDigits(x);
   x = 840683028573;
   PrintDigits(x);  

   return 0;
}

输出:

003
83028573