我正在用 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
有没有一种简单的方法可以做到这一点?