階乗の終わりのゼロ


35

n!基数10の終わりにゼロの数を見つけるプログラムまたは関数を作成しnます。ここで、は任意の形式の入力数です。

これはn正の整数であると仮定できます。これは整数でn!もあることを意味します。には小数点の後にゼロはありませんn!。また、プログラミング言語がnおよびの値を処理できると想定できますn!


テストケース

1
==> 0

5
==> 1

100
==> 24

666
==> 165

2016
==> 502

1234567891011121314151617181920
==> 308641972752780328537904295461

これはコードゴルフです。標準ルールが適用されます。バイト単位の最短コードが優先されます。

提出

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

# Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

# Ruby, <s>104</s> <s>101</s> 96 bytes

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

# Perl, 43 + 2 (-p flag) = 45 bytes

言語名をリンクにして、リーダーボードスニペットに表示することもできます。

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

リーダーボード

これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。



そのnを仮定することができます!私たちの言語のネイティブ整数型に収まりますか?
アレックスA.

@AlexA。はい、できます。
アークトゥルス

n入力文字列にすることができますか?
コナーオブライエン

15
n!整数型に収まると仮定することが許可されていない場合、これはより良い質問になると思います!まあ、多分別の時間。
シモンズ

回答:


43

Python 2、27バイト

f=lambda n:n and n/5+f(n/5)

エンディングゼロはの倍数の数5の要因によって制限されている5ほとんどであることがnあるn/5(床部門で)が、これはの倍数で繰り返される要因はカウントされません25, 125, ...。それらを取得するにはn、5 で割って再帰します。


19

ゼリー、5 バイト

!Æfċ5

階乗を見つけ、それを再度因数分解するという逆効果的なアプローチを使用して、素因数分解で5の指数をチェックします。

オンラインでお試しください!

!              Factorial
 Æf            List of prime factors, e.g. 120 -> [2, 2, 2, 3, 5]
   ċ5          Count number of 5s

4
いいね。トレードオフについて話してください!コードを5バイトにするには、メモリと時間を不合理な量だけ増やします。
ロスプレッサー

19

モーニングトンクレセント、1949 1909バイト

Take Northern Line to Bank
Take Circle Line to Bank
Take District Line to Parsons Green
Take District Line to Cannon Street
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take District Line to Turnham Green
Take District Line to Hammersmith
Take District Line to Upminster
Take District Line to Hammersmith
Take District Line to Turnham Green
Take District Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Blackfriars
Take Circle Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take Circle Line to Notting Hill Gate
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Bank
Take Circle Line to Blackfriars
Take District Line to Upminster
Take District Line to Temple
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Blackfriars
Take Circle Line to Hammersmith
Take District Line to Becontree
Take District Line to Cannon Street
Take District Line to Becontree
Take District Line to Cannon Street
Take District Line to Becontree
Take District Line to Blackfriars
Take Circle Line to Bank
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Upminster
Take District Line to Becontree
Take District Line to Bank
Take Circle Line to Bank
Take Northern Line to Angel
Take Northern Line to Bank
Take Circle Line to Bank
Take District Line to Upminster
Take District Line to Bank
Take Circle Line to Bank
Take Northern Line to Mornington Crescent

NieDzejkobのおかげで-40バイト


そして、これは今、私の最も支持されている答えです。
-pppery

3
私たちがMornington Crescent挑戦している人たちへの簡単な説明はクールでしょう。:)
ロバートベンソン

可能であれば、短い行名を使用して-40バイト
-NieDzejkob

18

Pyth、6バイト

/P.!Q5

ここで試してみてください。

/    5   Count 5's in
 P        the prime factorization of
  .!Q      the factorial of the input.

代替の7バイト

st.u/N5

累積リデュースは、繰り返しになるまで.u/N5繰り返し床分割し5ます。この場合は、0に達した後に発生します。

34 -> [34, 6, 1, 0]

次に、最初の要素が削除され(t)、残りが合計されます(s)。


13

実際には、10バイト

!$R;≈$l@l-

オンラインでお試しください!

math.factorialC拡張(64ビット整数に制限されている)を使用しているため、CPythonで真剣に実行すると、最後のテストケースが失敗することに注意してください。ただし、PyPyで真剣に実行することは問題ありません。

説明:

!$R;≈$l@l-
!           factorial of input
 $R         stringify, reverse
   ;≈$      make a copy, cast to int, then back to string (removes leading zeroes)
      l@l-  difference in lengths (the number of leading zeroes removed by the int conversion)

3
ああ、私はこの方法が5分割によるトリックを使用しない方法が好きです。
アークトゥルス

私はこの1つ上の12のバイトを数える
Score_Under

1
@Score_Under実際には、UTF-8ではなくCP437コードページを使用します。各文字は1バイトです。
メゴ

9

Haskell、26バイト

f 0=0
f n=(+)=<<f$div n 5

入力を5で除算し、その結果を、呼び出された関数に追加します。式(+)=<<fは入力xを受け取り、出力しますx+(f x)

から短縮:

f 0=0
f n=div n 5+f(div n 5)

f 0=0
f n|k<-div n 5=k+f k

非再帰式は28バイトを与えました:

f n=sum[n`div`5^i|i<-[1..n]]

であるiからカウンター1..n
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴはい、log_5(n)重要なことですが、残りは0になります
。– xnor

8

MATL、9バイト

:"@Yf5=vs

オンラインでお試しください!

これは、階乗の計算を回避するため、非常に大きな数に対して機能します。

他の回答と同様に、これ2は、階乗の約数が5出現回数よりも大きいか等しい場合に出現回数が現れるという事実を利用します。

:     % Implicit input. Inclusive range from 1 to that
"     % For each
  @   %   Push that value
  Yf  %   Array of prime factors
  5=  %   True for 5, false otherwise
  v   %   Concatenate vertically all stack contents
  s   %   Sum

6

05AB1E、5バイト

n> 4を保証できれば4バイトになります

コード:

Î!Ó7è

説明:

Î        # push 0 then input
  !      # factorial of n: 10 -> 2628800
   Ó     # get primefactor exponents -> [8, 4, 2, 1]
    7è   # get list[7] (list is indexed as string) -> 2
         # implicit output of number of 5s or 0 if n < 5

代替、はるかに高速な6バイトソリューション:Luis MendoのMATL回答に触発

LÒ€`5QO

説明:

L         # push range(1,n) inclusive, n=10 -> [1,2,3,4,5,6,7,8,9,10]
 Ò        # push prime factors of each number in list -> [[], [2], [3], [2, 2], [5], [2, 3], [7], [2, 2, 2], [3, 3], [2, 5]]
  €`      # flatten list of lists to list [2, 3, 2, 2, 5, 2, 3, 7, 2, 2, 2, 3, 3, 2, 5]
    5Q    # and compare each number to 5 -> [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
      O   # sum -> 2

編集: 5を含むすべての素数は5としてカウントされるため、¢(カウント)を使用してソリューションを削除しました(53など)。

編集2:比較としてより高い入力のためのより効率的なソリューションを追加しました。


うん、代わりに、動作する5Qはずです。いい答えだ!:)
アドナン

「出力が9を超える場合、これは失敗しません」というコメントで大きな入力でテストするつもりでしたが、少年05AB1Eの実装Ó遅いです
-Sp3000

ところで、最初のコードもになりますÎ!Ó2é。このバグは昨日修正されました。
アドナン

あなたは、UTF-8を使用している場合は、Î!Ó7è8バイトであり、そして「6バイト」ソリューションは、10バイトである
Score_Under

@Score_Underはい、それは正しいです。ただし、05AB1EはCP-1252エンコードを使用します。
アドナン

6

Matlab (59)(54)(39)

ねえ!私たちはあなたが数学が好きだと聞きました....

  @(n)sum(fix(n./5.^(1:fix(log(n)/1.6))))
  • これは、コードレビューで作成した回答に基づいています

  • コードレビューの私の答えで述べられているものよりも、factorial(n)のゼロの数の式はSum(n /(5 ^ k))です。ここで、kは1〜log_5(n)の間で変化します

  • ゴルファーになれない唯一の些細な理由log5は、matlabで組み込みとして使用できないことです。したがって、log(5)を1.6に置き換えました。

試してみる


いくつかの質問。1. Matlabで実際にどのように実行しますか?2. n = 1の結果はどうなりますか?
スチュアートブラフ

このタイプのANSを実行するために@StuartBruff(1)と、それはリターン0ない
Abr001am

OK。ありがとう。面白い。私はMatlabで関数ハンドルをあまり使用していませんでしたので、それを実行する方法について少し困惑していました... ans()が合計にカウントされないのはなぜですか?端正な答えですが、Mathcadで試してみましたが、「上限」が「下限」よりも小さい場合はMathcadが合計変数を自動デクリメントするため、合計の上限を変更する必要がありました(したがって、私の質問は0)。
スチュアートブラフ

5

Mathematica、20バイト

IntegerExponent[#!]&

IntegerExponentゼロをカウントします。楽しみのために、階乗を計算しないバージョンがあります:

Tr[#~IntegerExponent~5&~Array~#]&

Array2番目のソリューションで1バイト節約できると思います。
マーティンエンダー

5

C、28バイト

f(n){return(n/=5)?n+f(n):n;}

説明

末尾のゼロの数は、階乗を構成する5の数に等しくなります。そのうち1..n、5分の1が5に貢献するため、から始めn/5ます。これらのうちn/5、5分の1は25の倍数であるため、さらに5を追加します。私たちは、で終わるf(n) = n/5 + n/25 + n/125 + ...です、f(n) = n/5 + f(n/5)nゼロに達したら再帰を終了する必要があります。また、シーケンスポイントを利用し?:n、加算の前に分割します。

ボーナスとして、このコードはそれぞれを訪れるコードよりもはるかに高速です1..n(そして階乗を計算するよりもはるかに高速です)。

テストプログラム

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char **argv) {
    while(*++argv) {
        int i = atoi(*argv);
        printf("%d: %d\n",i,f(i));
    }
}

テスト出力

1:0
4:0
5:1
24:4
25:6
124:28
125:31
666:165
2016:502
2147483644:536870901
2147483647:536870902


素晴らしい説明のために+1
タイタス


4

ジュリア、34 31 30バイト

n->find(digits(prod(1:n)))[]-1

これは、符号付き整数型を受け入れ、整数を返す匿名関数です。呼び出すには、変数に割り当てます。より大きなテストケースではn、などのより大きな型として渡す必要がありBigIntます。

の階乗を計算しn(手動で使用するprod方が組み込みのより小さいfactorial)、その配列を取得しますdigits逆のfind、非ゼロ要素のインデックスを取得し、そのような最初のインデックスを取得し、1を減算します。

オンラインでお試しください!(最後のテストケースに時間がかかりすぎるため、最後のテストケースを除くすべてを含む)

デニスのおかげでバイトを節約できました!



3

網膜、33バイト

入力を単項で取ります。

出力を単項で返します。

+ `^(?= 1)(1 {5})* 1 *
$#1 $ * 1; $#1 $ *
;

(末尾の改行に注意してください。)

オンラインでお試しください!

使い方:

最初の段階:

+`^(?=1)(1{5})*1*
$#1$*1;$#1$*

わずかに未使用:

+`^(?=1)(11111)*1*\b
$#1$*1;$#1$*1

それが何をする:

  • まず、一致するものの最大数を見つけます11111
  • その番号で置き換える
  • で効果的にフロア分割し5ます。
  • 先読み(?=1)により、数が正であることを保証します。
  • この+`手段は、べき等になるまで繰り返します。
  • したがって、最初の段階は「5によるフロア分割の繰り返し」です。

入力が100(単項)の場合、テキストは次のようになります。

;;1111;11111111111111111111

第2段:

;

すべてのセミコロンを削除するだけです。


2

ルビー、22バイト

Ruby 0が真実であることは、バイトカウントの問題です。

f=->n{n>0?f[n/=5]+n:0}

なぜ0真実か?
コナーオブライエン

2
CᴏɴᴏʀO'Bʀɪᴇɴでルビー@、nilおよびfalsefalseyであり、他には何もありません。0真実であるとは、Rubyのインデックスおよび正規表現インデックス関数nilがの代わりに一致しない場合に戻ることを意味し、-1空の文字列がまだ真実であるなどの問題がある場合を意味するため、ゴルフで役立つケースがたくさんあります。
バリューインク

@ KevinLau-notKennyそれは理にかなっています。
コナーオブライエン

2

Perl 6、23バイト

{[+] -$_,$_,*div 50}
{sum -$_,$_,*div 5...0}

Perl 6^...に追加された場合、短くすることができました。シーケンスジェネレータとの間に修飾子 を追加すると、大きな数値の場合にメモリ効率が向上するはずです。 {sum $_,*div 5^...0}
lazysum

説明:

{ # implicitly uses $_ as its parameter
  sum

    # produce a sequence
    -$_,     # negate the next value
     $_,     # start of the sequence

     * div 5 # Whatever lambda that floor divides its input by 5

             # the input being the previous value in the sequence,
             # and the result gets appended to the sequence

     ...     # continue to do that until:

     0       # it reaches 0
}

テスト:

#! /usr/bin/env perl6

use v6.c;
use Test;

my @test = (
     1,   0,
     5,   1,
   100,  24,
   666, 165,
  2016, 502,
  1234567891011121314151617181920,
        308641972752780328537904295461,

  # [*] 5 xx 100
  7888609052210118054117285652827862296732064351090230047702789306640625,
        1972152263052529513529321413206965574183016087772557511925697326660156,
);

plan @test / 2;

# make it a postfix operator, because why not
my &postfix:<!0> = {[+] -$_,$_,*div 5...0}

for @test -> $input, $expected {
  is $input!0, $expected, "$input => $expected"
}

diag "runs in {now - INIT now} seconds"
1..7
ok 1 - 1 => 0
ok 2 - 5 => 1
ok 3 - 100 => 24
ok 4 - 666 => 165
ok 5 - 2016 => 502
ok 6 - 1234567891011121314151617181920 => 308641972752780328537904295461
ok 7 - 7888609052210118054117285652827862296732064351090230047702789306640625 => 1972152263052529513529321413206965574183016087772557511925697326660156
# runs in 0.0252692 seconds

(その最後の行少し、誤解を招くMoarVMを開始しているように、Perl 6のコンパイラとランタイムを読み込むコードをコンパイルし、それを実行します。それは実際に二合計で半分程度かかりそうです。
それはそれよりもかなり短い時間ではまだですWolframAlpha.comで最後のテストの結果を確認することでした)


2

Mathcad、[tbd]バイト

ここに画像の説明を入力してください

Mathcadは、式、テキスト、プロットを2Dで入力できる数学的な「ホワイトボード」です。加算、微分、積分などの多くの操作に数学記号を使用します。プログラミング演算子は特別な記号であり、通常、標準キーでのコントロールとシフトの単一のキーボードの組み合わせとして入力されます。

上に表示されているのは、Mathcadワークシートの入力時とMathcadによる評価時の外観です。たとえば、nを2016から他の値に変更すると、Mathcadは結果を502から新しい値に更新します。

http://www.ptc.com/engineering-math-software/mathcad/free-download


Mathcadのバイト等価スコアリング方法はまだ決定されていません。シンボルの等価性を考慮すると、ソリューションには約24 "バイト"がかかります(while演算子は、 "ctl-]"キーの組み合わせ(またはツールバーから)を使用してのみ入力できます)。Agawa001のMatlabメソッドは、Mathcadに変換すると約37バイトかかります(合計演算子はctl-shft- $で入力されます)。


処理するのに素晴らしいツールのように聞こえますが、私はそれをダウンロードするのに二度とspareしみません!
Abr001am

2

dc、12バイト

[5/dd0<f+]sf

これは、fスタックの最上部からの入力を消費し、スタックの最上部に出力を残す関数を定義します。数学的な根拠については、私のCの回答をご覧ください。繰り返し5で除算し、スタックの値を累積してから、すべての結果を追加します。

5/d   # divide by 5, and leave a copy behind
d0<   # still greater than zero?
f+    # if so, apply f to the new value and add

テストプログラム

# read input values
?
# print prefix
[  # for each value
    # print prefix
    [> ]ndn[ ==> ]n
    # call f(n)
    lfx
    # print suffix
    n[  
]n
    # repeat for each value on stack
    z0<t
]
# define and run test function 't'
dstx

テスト出力

./79762.dc <<<'1234567891011121314151617181920 2016 666 125 124 25 24 5 4 1'
1 ==> 0  
4 ==> 0  
5 ==> 1  
24 ==> 4  
25 ==> 6  
124 ==> 28  
125 ==> 31  
666 ==> 165  
2016 ==> 502  
1234567891011121314151617181920 ==> 308641972752780328537904295461  


1

J、28 17 16バイト

<.@+/@(%5^>:@i.)

xnorの答えからの非再帰的手法とほとんど同じです。


個人的には28バイトでクロックインするのが好きなので、ここに古いバージョンがあります。

+/@>@{:@(0<;._1@,'0'&=@":@!)

必要ではありませんが、x:精度を高めるためにテストケースに含めました。

   tf0 =: +/@>@{:@(0<;._1@,'0'&=@":@!@x:)
   tf0 5
1
   tf0 100
24

   tf0g =: tf0"0
   tf0g 1 5 100 666 2016
0 1 24 165 502

最後の数字はこの関数では機能しません。

説明

これは、計算n!して文字列に変換し、各メンバーがと等しいかどうかをチェックすることで機能し'0'ます。の場合n = 15、このプロセスは次のようになります。

15
15! => 1307674368000
": 1307674368000 => '1307674368000'
'0' = '1307674368000' => 0 0 1 0 0 0 0 0 0 0 1 1 1

ここで、;._1最初の要素(ゼロ)でリストを分割し、各分割結果をボックス化して、エース(a:)または1sのランで満たされたボックスを生成します。

┌┬─┬┬┬┬┬┬┬─────┐
││1│││││││1 1 1│
└┴─┴┴┴┴┴┴┴─────┘

最後のメンバー({:)を取得し、それをアンボックス(>)し、その上で合計を実行します+/、ゼロの数を生成します。

より読みやすいバージョンは次のとおりです。

split =: <;._1@,
tostr =: ":
is =: =
last =: {:
unbox =: >
sum =: +/
precision =: x:
n =: 15

NB. the function itself
tf0 =: sum unbox last 0 split '0' is tostr ! precision n
tf0 =: sum @ unbox @ last @ (0 split '0'&is @ tostr @ ! @ precision)
tf0 =: +/ @ > @ {: @ (0 <;._1@, '0'&= @ ": @ ! )

>:@i.1+i.バイトを節約するために書き込むことができます。
algorithmshark

[:#.~'0'=":@!末尾の1のカウント方法を変更することにより、古いバージョンを13バイトにすることができます。
コール

1

Python 3、52バイト

g=lambda x,y=1,z=0:z-x if y>x else g(x,y*5,z+x//y)

これは機能しません。テストケースを試してください。
xnor

これで動作するはずです。
マゼンタ


1

RETURN、17バイト

[$[5÷\%$F+][]?]=F

Try it here.

再帰演算子ラムダ。使用法:

[$[5÷\%$F+][]?]=F666F

説明

[             ]=F  Lambda -> Operator F
 $                 Check if top of stack is truthy
  [       ][]?     Conditional
   5÷\%$F+         If so, do x/5+F(x/5)

1

Perl、24 22 + 1(-pフラグ)= 23バイト

$\+=$_=$_/5|0while$_}{

を使用して:

> echo 2016 | perl -pe '$\+=$_=$_/5|0while$_}{'

完全なプログラム:

while (<>) {
# code above added by -p
    while ($_) {
        $\ += $_ = int($_ / 5);
    }
} {
# code below added by -p
    print;  # prints $_ (undef here) and $\
}

1

Java、38バイト

int z(int n){return n>0?n/5+z(n/5):0;}

ungolfedメソッドを使用した完全なプログラム:

import java.util.Scanner;

public class Q79762{
    int zero_ungolfed(int number){
        if(number == 0){
            return 0;
        }
        return number/5 + zero_ungolfed(number/5);
    }
    int z(int n){return n>0?n/5+z(n/5):0;}
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.close();
        System.out.println(new Q79762().zero_ungolfed(n));
        System.out.println(new Q79762().z(n));
    }
}

1

J、7バイト

右側の引数を取る単項関数。

3{:@q:!

xが正の場合、最初の素数についてのみ、のx q: y素因数分解で指数を返します。-rd首相は5で、リストの末尾になります。yx3{:

x末尾にを付けて整数を入力する必要があります。そうしないと、Jはそれらを浮動小数点数として扱います。

   3{:@q:! 100x
24
   3{:@q:! 666x
165
   3{:@q:! 2016x
502

tryj.tkで自分で試してみてください。ただし、1343より大きいものを試そうとすると、このオンラインインタープリターが文句を言うことに注意してください。

nを計算しないものが必要な場合!したがって、整数に収まる必要はありません<.@%&5(+$:@)^:*。再帰的な解決策を使用してください。(tryj.tkは、大規模な入力に対してはまだいささかです。)


1

ルビー、70 61 51 49バイト

Kenny Lauとdanieroのおかげでバージョン3

->n{(n-n.to_s(5).chars.map(&:to_i).reduce(:+))/4}

編集:のto_i 前にマッピングすることで2バイトを保存できることがわかりましたreduce。奇妙な:P

この関数は、n基数5の合計を減算し、nその結果を4で除算します。これは、幾何級数の合計に関連してい1+5+25+..+5**n = (5**n+1)/4ます。

例として(再び、Kenny Lauに感謝します)、3582413基数5)から基数5桁を引いたものを考えます。

2413-2-4-1-3 
= (2000-2) + (400-4) + (10-1) + (3-3)
# consider that 1000-1=444 and you'll see why every 5**n is multiplied by 4
= 2*444 + 4*44 + 1*4 + 3*0
= 2*(4*5**0+4*5**1+4*5**2) + 4*(4*5**0+4*5**1) + 1*(4*5**0) + 3*()
= 348

割り348によって4、あなたが取得しますf(358) = 87

Kenny Lauのおかげでバージョン2

->n{s=(1..n).reduce(:*).to_s;s.size-s.reverse.to_i.to_s.size}

この関数は、計算しn!、その後減算sizeのをn!からsize(n!).reverse.to_i.to_s帰国、したがって、すべてのゼロを除去する、sizeゼロ自身のを。

バージョン1

->n{s=n.to_s(5).chars;(0...s.size).reduce{|a,b|a+(s[0,b]*'').to_i(5)}}

これは、「の5素因数分解にはn!何個ありますか?」のバリエーションです。Rubyのシンプルなベース変換ビルトインを使用するトリック。

ゴルフは少し苦痛ですが、からIntegerに変換StringArray、の一部をArray取得し、からStringInteger再び変換しreduceます。ゴルフの提案は大歓迎です。


これは、マップするために少し短いですto_i削減の前に:->n{(n-n.to_s(5).chars.map(&:to_i).reduce(:+))/4}(2つのバイトが保存されます)
daniero

@daniero私はそれを期待していなかったでしょう。ありがとう:D
Sherlock9


1

Dyalog APL、9バイト

⊥⍨'0'=⍕!⎕

番号のプロンプト

! 階乗

ストリング化する

'0'= 文字ゼロと等しいことを確認します

⊥⍨ 末尾の真をカウント*


*文字通り、それは混合ベースからベース10への変換であり、ブールリストを数値とベースの両方として使用します。

⊥⍨0 1 0 1 1同じで0 1 0 1 1⊥⍨0 1 0 1 1ある 0×(0×1×0×1×1) 1×(1×0×1×1) 0×(0×1×1) 1×(1×1) + 1×(1)再び2つ(末尾の1の数)です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.