LoginSignup
2
2

More than 5 years have passed since last update.

Project Euler Q20 【各位の数字の和 2】

Last updated at Posted at 2017-11-07

Project Eulerをワンライナーで解いてみる。
間違っていたらコメントください。

問題

$n × (n - 1) × ... × 3 × 2 × 1$ を $n!$ と表す.

例えば, $10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800$ となる.
この数の各桁の合計は $3 + 6 + 2 + 8 + 8 + 0 + 0 = 27$ である.

では, $100!$ の各位の数字の和を求めよ.

解答

seq 100 |
awk 'BEGIN{a[1]=1} {for(i=1;i<=length(a);i++){v[i]=a[i]*$1};for(i=1;i<=158;i++){a[i]=v[i]%10;v[i+1]+=int(v[i]/10)}} END{for(i=length(a);1<=i;i--){printf a[i]}}' |
sed 's/./&\n/g' |
awk '{s+=$1} END{print s}'
648

awkだと$22!$までしか正しく計算できなかった。
$2^{1000}$は計算できたのにな。やり方が悪いのかな。
仕方ないので繰り上がりのロジックをawkで書いた。

2017/11/08追記
taramさんから教えて頂いた内容
GNU awk 4.1以上で、かつ必要なライブラリがインストールされていれば、-Mでできる!

Windowsに入れているgit bashawkGNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.3, GNU MP 6.0.0)だったのでやってみました。
(GNU MPというものが必要らしい。)

seq 100 |
awk -M 'BEGIN{s=1} {s*=$1} END{print s}' |
sed 's/./&\n/g' |
awk '{s+=$1} END{print s}'
648

スッキリ!!

答え合わせ

こちらのサイト様と一致していればOKとした。
http://kingyojima.net/pje/020.html

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2