AOJ0052 Factorial II
例によってRubyで書いた。
末尾に0がつく===10が掛かっている===2と5がかかっている、だから
素因数の2と5の少ない方が0の個数になる、という方針で解いた。
以下ソースと、テスト。
# encoding: utf-8 class ZeroCounter attr_accessor:num attr_accessor:num_zero def initialize(i) @num = i @num_zero = [count_num_of_primes(2), count_num_of_primes(5)].min p @num_zero end def count_num_of_primes(prime) num_pf = 0 i = prime while @num / i > 0 do num_pf += @num / i i = i * prime end return num_pf end end while (line = gets) do if line.to_i != 0 then ZeroCounter.new(line.to_i) end end
#encoding: utf-8 require 'rspec' require './a' describe ZeroCounter do it "should return the num of prime factor 2" do zc = ZeroCounter.new(19) zc.count_num_of_primes(2).should == 16 end it "should return the num of zeros of factorial" do zc = ZeroCounter.new(19) zc.num_zero.should == 3 end it "should return the num of zeros of factorial" do zc = ZeroCounter.new(45) zc.num_zero.should == 10 end it "should return the num of zeros of factorial" do zc = ZeroCounter.new(50) zc.num_zero.should == 12 end end