10進数を2進数と16進数に自分で変換する
10進数を16進数にするコードだけ作っていたつもりだったんだけど、
テストコードを走らせたら、2進数の変換もそのまま行けたので追記。
コード
class Radix def conv(num,radix) res = [] overmeasure = nil #剰余 count = 1 aliquot = nil #約数 numbers = {10 => "A", 11=>"B", 12=>"C",13=>"D",14=>"E",15=>"F"} until aliquot == 0 count.times do |i| if i == 0 aliquot = num / radix overmeasure = num % radix else overmeasure = aliquot % radix aliquot = aliquot / radix end end if numbers.has_key?(overmeasure) res << numbers[overmeasure] else res << overmeasure end count += 1 end res.reverse.join end end require "test/unit" require_relative "radix" class TestRadix < Test::Unit::TestCase def setup @radix = Radix.new end def test_conv assert_equal("1", @radix.conv(1,16)) assert_equal("A", @radix.conv(10,16)) assert_equal("64", @radix.conv(100,16)) assert_equal("3E8", @radix.conv(1000,16)) assert_equal("2710", @radix.conv(10000,16)) assert_equal("186A0", @radix.conv(100000,16)) assert_equal("10", @radix.conv(2,2)) assert_equal("1010", @radix.conv(10,2)) assert_equal("1111101000", @radix.conv(1000,2)) end end Started . Finished in 0.000909 seconds. ------------------------------------------------------------------------------- 1 tests, 9 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 100% passed ------------------------------------------------------------------------------- 1100.11 tests/s, 9900.99 assertions/s
3時間ぐらいかかった。デバッグしまっくてたせいで、動くけど、理解できてる感覚があまりない。プログラミングあるある。