6

我正在用 C99 编写一个多精度库。根据我的代码编译的平​​台,我选择不同的表示基础。

因此,例如,假设在平台 X 上系统选择 BASE=100; 在平台 Y BASE=10000 上;

假设我代表 big unsigned int 如下:

typedef struct a {
       big_enough_uint *digits;
       unsigned int length;
       unsigned int last;
} bigUint;

所以当我在 BASE-100 系统上时,我希望我的打印功能是

void my_print(bigUint *A){
     unsigned int i=0;

     fprintf(stdout,"%d",A->digits[0]);
     if(i!= A->last){
          for(;i<=A->last;i++)
                fprintf(stdout,"%02d",A->digits[i]);
     }
     printf(stdout,"\n");
}

在 BASE-10000 系统上,我希望它类似于

void my_print(bigUint *A){
     unsigned int i=0;

     fprintf(stdout,"%d",A->digits[0]);
     if(i!= A->last){
          for(;i<=A->last;i++)
                fprintf(stdout,"%04d",A->digits[i]);
     }
     printf(stdout,"\n");
}

我为什么要这样做??

假设我有以下号码:

12345600026789

在 BASE-100 表示中,digits 数组将是(小端形式):

12|34|56|0|2|67|89
         ^ ^ I want ONE LEADING ZEROES

在 BASE-10000 中:

12|3456|2|6789
        ^ I want THREE LEADING ZEROES

有没有一种简单的方法可以做到这一点?

4

1 回答 1

10

阅读 中有关*字段宽度的占位符man printf

printf("%0*d", 3, 42);

042

printf("% *s", 42, "alk");

<39 spaces>alk
于 2012-10-27T14:01:21.970 回答