2017-02-12 49 views
0

我最近又開始做一些BF的樂趣,今天我做了一個階乘代碼,正如我所知,它與我在網上發現的很多不同。我只需要五個單元格來計算它,但不幸的是我不能輸入數字,如100例如。如何提高我的BF因子碼輸入大數字並輸出整個結果?

我想知道,如果有人有一個想法,我該怎麼做,以改善我的代碼能夠做到這一點?

編輯:A,B,C,d和E是細胞

++++    #For example we put four in input 

[->+<]    #Put A in B and A=0 
[-]    #If A=0 (which is true) 
>-     #Decrease B by one 
[->+>+>+<<<]  #Put B in C, D and E (at the end pointer is on B) 
>     #Move on C         
[-<+>]    #Put C in B and C=0 
<+     #Add one in B 
>>[-<<<+>>>]  #Put D in A and D=0 
>     #Pointer move on E 

[           #While 
    -         #E is not null 
    <<<< 
    [->[->+>+<<]>[-<+>]<<]>[-]>>[-<<+>>] #Do A*B and put the result in B 
    > 
    [-<+<<<+>>>>]      #Put E in A and D 
    < 
    [->+<]        #Then put D in E 
    >         #pointer goes on E to test the while condition 
]           #While end 

<<<    #If E is null go back to cell B 
[-<+>]    #Put B in A 
<     #Pointer on A at the end 

預先感謝您爲您解答!


如果您需要幫助以可視化的代碼步步go there 我用最好的解釋是this one,你可以在32位執行BF和計數操作的數量。它需要兩千萬以上的十億分之一......但它確實很快。

+0

支持人數達到100無關與您的代碼明確;它只取決於你的解釋器,以及它所支持的整數的大小。如果你要例如使用python解釋器,那麼即使對於非常高的階乘,你的代碼也會產生結果;如果你使用32位的,你會受到限制,除非你用某種方式在brainfuck中存儲bigint,並實現所需的所有算法,而且我懷疑這樣做的代碼會溢出回答的字符限制。簡而言之 - **使用支持BigInts **的解釋器。 – Uriel

+0

> ++++++++++ >>> +> + [>>> + [ - [<<<<<[+<<<<<]>> [[ - ]> [<<+> +> - ] <[> + <-]<[> + <-[> + <-[> + <-[> + <-[> + <-[> + <-[> + <-[> + <-[> + <-[> [ - ] >>>> +> + <<<<<<-[> + < - ]]]]]]]]]]]> [<+> - ] + >>>>>] <<<<<[<<<<<]> >>>>>> [>>>>>] ++ [ - <<<<<]> >>>>> - ] + >>>>>] <[> ++ < - ] <<<< [<[ > + <-]<<<<]> > [ - > [ - ] ++++++ [<++++++++> - ] >>>>] <<<<<[<[> +> + <<-]>。 <<<<<]>。>>>>]與8位,你可以找到你想要的所有階乘.. @UrielEli –

+0

這是如何工作的?它計算它還是隻是打印階乘(它使用ascii打印數字,而你使用內存作爲結果) – Uriel

回答

-3

你需要實現某種類型的bigint功能。考慮到在bf中易於實現的唯一無界數據結構是放置在任何其他可能要使用的單元之後的單個堆棧,因此如何做到這一點不會適合這裏的答案(請閱讀:我不知道)。

例如,您可以在多個8位操作方面實現16位操作(就16位而言,32位也是如此),但因子增長非常快,甚至64位值也不能保持100! (這是3.1e158,這意味着你至少需要529位來表示)

好運實施bigints在BF

相關問題