10進数で回分(awk)

逆から数字を読んでも同じ数になる数のことを「回分数」と呼びます。
例えば、「123454321」のような数のことをです。

問題

10進数、2進数、8進数のいずれかで表現しても回分数となる数のうち、10進数の10以上で最小の値を求めてください。

awkには10進数を8進数に変換するにはsprintf関数を使えば、出来ます。
しかし、10進数を2進数には変換する関数がありませんので、自分で実装するしかありません。
以下ソースです。

#!/usr/bin/awk -f

BEGIN{
    TRUE = 1;
    FALSE = 0;

    num = 11;
    while(TRUE){
        if(jussin(num)){
            if(nishin(num)){
                if(hasshin(num)){
                    print num;
                    exit;
                }
            }
        }
        num += 2;
    }
}

function jussin(n,  new){
    max = split(n,a,"");
    for(i = max; i >= 1; i--){
        new = new a[i];
    }
    if(new == n){
        return TRUE;
    }else{
        return FALSE;
    }
}

function nishin(n,  number,kaibun,new){
    number = n;

    while(n >= 2){
        amari = n % 2;
        kaibun = amari kaibun;
        n = int(n / 2);
    }
    kaibun = n kaibun;
    max = split(kaibun,a,"");
    for(i = max; i >= 1; i--){
        new = new a[i];
    }
    if(kaibun == new){
        return TRUE;
    }else{
        return FALSE;
    }
}

function hasshin(n, new,a){
    number = sprintf("%o",n);
    max = split(number,a,"");
    for(i = max; i >= 1; i--){
        new =  new a[i];
    }
    if(new == number){
        return TRUE;
    }else{
        return FALSE;
    }
}