#/*********************************************************** # radconv.rb -- 基数の変換 #***********************************************************/ def conv1( x, d, m, c) i = 0; while(x !=0 && i < m) c[i] = x % d; x /= d i += 1 end if (x == 0); return i; # 桁数 else; return -1; # エラー end end def conv2( d1, m1, x1, d2, m2, x2) i = 0; while(m1 > 0 && i < m2) r = 0 (m1 - 1).downto(0) do |j| t = d1 * r + x1[j]; x1[j] = t / d2; r = t % d2 end x2[i] = r while (m1 > 0 && x1[m1 - 1] == 0); m1 -= 1; end i += 1 end if (m1 == 0); return i # 桁数 else; return -1 # エラー end end M = 1000 x1 = []; x2 = [] printf("x = "); x = gets.to_i m1 = conv1(x, 8, M, x1) if (m1 < 0) printf("conv1: error\n"); exit 1 end printf("8進(octal): ") (m1 - 1).downto(0) {|i| printf("%d", x1[i])} printf("\n") m2 = conv2(8, m1, x1, 2, M, x2) if (m1 < 0) printf("conv2: error\n"); exit 1 end printf("2進(binary): ") (m2 - 1).downto(0) {|i| printf("%d", x2[i])} printf("\n") exit 0