おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

徒然Ruby(2)整数

徒然なるままにRuby(2)整数

整数

Rubyで整数を使うことができます。

print 10
print "\n"

example2.rbに保存して実行すると、

$ ruby example2.rb
10
$

計算

整数は計算できます。

print 1+2
print "\n"
print 10-3
print "\n"
print 2*3
print "\n"
print 10/2
print "\n"
print 20/3
print "\n"

アスタリスク('*')は掛け算の記号です。 実行すると(以下コマンド行は省略します)、

3
7
6
5
6
  • printは計算結果を表示します。 計算の式自体(例えば「1+2」)は表示されません。
  • 20/3では、あまりは捨てられます。

カッコを使った複雑な計算も可能です。

print (2-4)*(3+5)
print "\n"

実行すると-16が表示されます。

(2-4)*(3+5) = (-2)*8 = -16

きちんと計算できていたことがわかります。

大きさの上限はない

多くのプログラミング言語では整数の上限がありますが、Rubyにはありません。

print 123456789123456789*123456789123456789
print "\n"

実行すると

15241578780673678515622620750190521

計算が合っているかどうか確かめるのは大変なのでやりませんが、エラーにならずに実行されたのは分かると思います。

桁数の多い数字にはコンマをつけますが、Rubyではコンマのかわりにアンダースコア(_)を使うことができます。

print 1_000_000_000_000

一兆が表示されます。

1000000000000

表示される方にはアンダースコア(あるいはコンマ)が出ないので分かりにくいですね。 表示でコンマをつける方法は今回の内容の範囲を超えるので、本文では扱わず、最後にオマケとして説明します。

なお、アンダースコアは単に無視されているだけなので、数字の先頭以外であればどこに書いても構いません。

メソッド

Rubyでは整数はオブジェクトの一種です。 オブジェクトはメソッドを持っています。 メソッドはオブジェクト自身に対して、なんらかの操作をします。

例えば、その整数の絶対値をとるメソッドはabsです。 絶対値absolute valueの最初の3文字です。 使い方はドットとabsを整数の後ろにつけます。

print 20.abs
print "\n"
print -30.abs
print "\n"

実行すると

20
30

が表示されます。

gcdは最大公約数(greatest common divisor)を計算するメソッドです。 最大公約数には2つの整数が必要です。 もうひとつの整数はgcdのあとにカッコとともに付け加えます。 カッコを省略して半角スペースで区切ることもできます。

print 12.gcd(18)
print "\n"
print 20.gcd 30
print "\n"

実行すると、

6
10

と表示されます。

いくつかのメソッドを紹介すると

メソッド 説明
lcm(整数) 最大公約数を計算
even? 偶数であればtrue奇数であればfalse
odd? 偶数であればfalse奇数であればtrue

コンマ区切りをつけて数字を表示

この項目の内容は記事のカバーできる範囲を越えているので、参考程度に見てください。

yukichi gemをインストール

$ gem install yukichi

例えば1234567890をコンマ区切りをつけて表示するには

require "yukichi"

print Yukichi.new(1234567890).jpy_comma()
print "\n"

実行すると

1,234,567,890

yukichi gemの中では次のようなメソッドを使っています。

1234567890.to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/, '\1,')

これを使えばgemのインストールは不要です。

また、別の方法としては

1234567890.digits(1000).reverse.inject{|a,b| a.to_s+','+sprintf("%03d",b)}.to_s

でもできます。 最後の方法は私自身の考案です。