例如,我要打印最多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
可以做到吗?
答案 0 :(得分:2)
您可以执行以下操作:
printf("%03d", x % 100000000);
%03d
告诉printf
在左边填充零,直到输出至少3个字符长。
另一部分相当简单,您想从右边最多输入8个吗?看看其余的。
如果您的输入不适合整数,只需将int
替换为long long
,然后将%03d
替换为%03lld
,因为lld
是说明符long long int
(或ld
仅long int
)。
所有这些都假设您的值始终严格为正(在这种情况下,您还可以使用unsigned
变量,其中用d
代替说明符u
)。如果您对值进行了签名,并且希望最终输出为8个字符长(包括减号),则可以简单地应用条件语句:
printf("%03d", (x < 0 ? x % 10000000 : x % 100000000));
答案 1 :(得分:0)
您可以编写一个简单的函数来完成此操作:
-使用ceil
和log
计算数字中的位数
-使用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