binary_addition.rb 639 B

123456789101112131415161718192021222324252627282930
  1. #!/usr/bin/ruby
  2. # A simple addition algorithm to add two binary-strings.
  3. def add_binary(a,b)
  4. a = a.reverse.chars.map{|c| c.to_i }
  5. b = b.reverse.chars.map{|c| c.to_i }
  6. l = [a.size, b.size].max
  7. c = [0] * (l+1)
  8. (l - a.size).times { a << 0 }
  9. (l - b.size).times { b << 0 }
  10. for i in (0 .. l-1)
  11. c[i] += (a[i] + b[i])
  12. if (c[i] >= 2)
  13. c[i+1] = c[i]>>1
  14. c[i] &= 1
  15. end
  16. end
  17. c.pop while (c[-1] == 0 and c.size > 1)
  18. c.join.reverse
  19. end
  20. puts add_binary("101110011101110010101010100001", "1101011110100111101111000100") #=> 111011111100011010011001100101