10進数から2進数への変換 色々。

このところ近年稀にみる急ぎタスクが全くない(=所謂暇)状態が続いているので、
鈍り解消にプログラミングお題でも解いて遊んでみる。

初回は「10進数から2進数への変換」

まずはPHP

$_divisor = 2;
$_remainder = $_divisor;
$_quotient = 0;
$_result = '';
while($_dividend >= $_divisor) {
    $_quotient = (int)($_dividend / $_divisor);
    $_remainder = $_dividend % $_divisor;
    $_dividend = $_quotient;
    $_result .= "$_remainder";
}
$_result .= "$_quotient";
return $_result;

続いてJava

System.out.println("test");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
Integer dividend = Integer.parseInt(input);
if(dividend == null) {
    System.out.println("input string is not number.");
    return;
}

/*
 * M(被除数、実,dividend)÷N(除数,divisor, modulus)=Q(商,quotient)…R(剰余、余り,remainder, residue)
 */
int quotient = 0;
int remainder = 0;
StringBuffer result = new StringBuffer("");
while(dividend >= DIVISOR) {
    quotient = dividend / DIVISOR;
    remainder = dividend % DIVISOR;
    result.append(remainder);
    dividend = quotient;
}
result.append(quotient);
System.out.println(result.toString());

で、最近ハマってるシェルスクリプト
10進数の10を2進数にすると。

echo "ibase=10; obase=2; 10" | bc

わんらいな。素敵。
やっぱシェルスクリプト程強力なツール無いと思う。
ビット演算の左シフト使って頑張るとこんな感じ↓

echo 'input number'
read input
echo "input is:${input}"

RES_NUMBER=`echo "${input}" | sed 's/[^0-9]//g'`
if [ ${input} -ne ${RES_NUMBER} ]; then
    echo "input is not number"
fi

result=""
i=0
while [ $i -ne 32 ]; do
echo $input
    result="$(( input & 1 ))${result}"
    input=$(( input >> 1 ))
    i=`expr $i + 1`
done

echo ${result}

ビット演算とか普段使わないのでイイ思い出しになった。