とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

基数変換(4)

コンパイルが通るようにすると,次のようになります。

#include <stdlib.h>
#include <stdio.h>

void PrintBinary(int n)
{
static const char s[] = "01";
div_t d;
d = div(n, 2);
if (d.quot) PrintBinary(d.quot);
putchar(s[d.rem]);
}

int main(void)
{
int n;
for (n = 0; n < 16; ++n) {
PrintBinary(n); putchar('\n');
}
return 0;
}


これを一般化するにはどうしたらよいでしょうか? まず,2 という定数を を adic という変数にします。関数呼び出しで基数を指定できるように,変数は引数にするのがよいでしょう。さらに(私が)考え得る最大の adic は 62 です。0-9(10)+英数小文字(26)+英数大文字(26)です。これを文字列リテラルにして,添え字で文字を参照できるようにすると簡単です。s[0] で '0' を,s[10] で 'a' を, s[36] で 'A' を参照できます。