Hatena::Grouprubyist

てーげーRuby

2008-06-30

練習問題 文字列(後半)

| 17:13

(2) "七千百二十三"といった、漢数字による数の表現を、「7123」のような

数値に変換するメソッドkan2numを定義してください。

  1 $KCODE='u'
  2 def kan2num(kan)
  3   i = nil
  4   sum = 0
  5   kan.scan(/./).each do |e|
  6    if e == ""
  7       i = 0
  8     elsif e == ""
  9       i = 1
 10     elsif e == ""
 11       i = 2
 12     elsif e == ""
 13       i = 3
 14     elsif e == ""
 15       i = 4
 16     elsif e == ""
 17       i = 5
 18     elsif e == ""
 19       i = 6
 20     elsif e == ""
 21       i = 7
 22     elsif e == ""
 23       i = 8
 24     elsif e == ""
 25       i = 9
 26     elsif e == ""
 27       if i
 28         i = i*1000
 29       else
 30         i = 1000
 31       end
 32     sum += i
 33     i = nil
 34     elsif e == ""
 35       if i
 36         i = i*100
 37       else
 38         i = 100
 39       end
 40     sum += i
 41     i = nil
 42     elsif e == ""
 43       if i
 44         i = i*10
 45       else
 46         i = 10
 47       end
 48     sum += i
 49     i = nil
 50     end
 51   end
 52
 53   return sum+=i
 54 end
irb(main):001:0> load "kan2num.rb"
=> true
irb(main):002:0> kan2num("七千百二十三")
=> 7123

(3) "12"といった数値による文字列を、"**********"というように、その数だけ

*」が並ぶ文字列に変換するメソッドnum2astriskを、Numericクラス(またはその

サブクラス)のオブジェクトやメソッドを使わずに定義してください。

  1 def num2astrisk(num)
  2   print_astrisk = ""
  3   keta = 1
  4   num.scan(/./).reverse.each do |e|
  5     if e == "0"
  6     elsif e == "1"
  7       astrisk = "*"
  8     elsif e == "2"
  9       astrisk = "**"
 10     elsif e == "3"
 11       astrisk = "***"
 12     elsif e == "4"
 13       astrisk = "****"
 14     elsif e == "5"
 15       astrisk = "*****"
 16     elsif e == "6"
 17       astrisk = "******"
 18     elsif e == "7"
 19       astrisk = "*******"
 20     elsif e == "8"
 21       astrisk = "********"
 22     elsif e == "9"
 23       astrisk = "*********"
 24     end
 25     print_astrisk += astrisk * keta if astrisk
 26     keta = keta*10
 27   end
 28
 29   puts print_astrisk
 30 end
irb(main):001:0> load "num2astrisk.rb"
=> true
irb(main):002:0> num2astrisk("12")
************
=> nil
irb(main):003:0> num2astrisk("100")
****************************************************************************************************
=> nil