私はC99で多倍長ライブラリを書いています。コードがコンパイルされているプラットフォームに応じて、異なる表現ベースを選択しています。
したがって、たとえば、プラットフォームXでシステムがBASE=100を選択するとします。プラットフォームYBASE= 10000;
次のように、大きなunsignedintを表しているとしましょう。
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表現では、数字配列は(リトルエンディアン形式)になります。
12|34|56|0|2|67|89
^ ^ I want ONE LEADING ZEROES
BASE-10000にいる間:
12|3456|2|6789
^ I want THREE LEADING ZEROES
それを行う簡単な方法はありますか?