Problem 16 -Ruby編-
2^15 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。 同様にして、2^1000 の各数字の合計を求めよ。
Problem 16 - PukiWiki
番外編的な扱いで。
2の1000乗をCで扱うにはBignumを実装しなければならなさそう(またはOpenSSLのBNを使う?)だったので後回しにして、とりあえずRubyで手抜き実装してみた。
Rubyでは、
演算の結果が Fixnum の範囲内である場 合には Fixnum に変換され、逆に Fixnum の範囲を越える時には Bignum に拡張されます。
Bignum - Rubyリファレンスマニュアル
とのことなので、気にせず数値を突っ込めるというわけですね。
#! /usr/bin/env ruby NUM_TIMES = 1000 a = (2 ** NUM_TIMES).to_s sum = 0 a.size.times {|i| sum += a[i].chr.to_i } puts sum
C言語に比べてコード量が格段に少ないです。LL恐るべし。
実行結果
$ ruby p16.rb 1366
ブコメより
zorio (2 ** 1000).to_s.split('').inject(0) do |s,n| s + n.to_i end
はてなブックマーク - Problem 16 -Ruby編- - にたまごほうれん草
一行で済みますね。split('')で一文字ずつ区切りになるというのは初めて知りました。