एक उदाहरण के माध्यम से जाना है, तो दो:
repBinario 5
repBinario 5
के स्थानापन्न परिभाषा:
10 * repBinario (5 `div` 2) + 5 `mod` 2
कम div
और mod
:
10 * repBinario 2 + 1
^
यहां हमने अपना पहला अंक बनाया है, ^
के साथ चिह्नित है।repBinario 2
की
स्थानापन्न परिभाषा:
10 * (10 * repBinario (2 `div` 2) + 2 `mod` 2) + 1
^
कम div
और mod
:
repBinario 1
की
10 * (10 * repBinario 1 + 0) + 1
^^
स्थानापन्न परिभाषा:
10 * (10 * (10 * repBinario (1 `div` 2) + 1 `mod` 2) + 0) + 1
^^
कम div
और mod
:
10 * (10 * (10 * repBinario 0 + 1) + 0) + 1
^^^
स्थानापन्न repBinario 0
की परिभाषा:
10 * (10 * (10 * 0 + 1) + 0) + 1
^^^
कम करें:
101
हर कदम पर, (`mod` 2)
कम से कम महत्वपूर्ण बाइनरी अंक हो जाता है, और (`div` 2)
संख्या दाहिनी ओर बदलाव , अंक को छोड़कर और शेष संख्या को पुनः प्राप्त करने के लिए टी ओ divBinario
। अंत में, हम विपरीत प्रक्रिया करते हैं: (+ d)
परिणाम के लिए वर्तमान अंक जोड़ता है, और (* 10)
संख्या बाईं ओर स्थानांतरित करता है ताकि हम और अधिक अंक जोड़ सकें।
आपको जो दशमलव मिलता है वह दशमलव संख्या है जो मूल इनपुट के बाइनरी प्रतिनिधित्व के समान दिखता है।
आप 10
द्वारा गुणा निकालते हैं, तो आप popCount
, एक समारोह है कि आप की आबादी गिनती देता मिलता है एक नंबर-अपनी द्विआधारी प्रतिनिधित्व में 1
बिट्स की संख्या:
popCount 0 = 0
popCount x = popCount (x `div` 2) + x `mod` 2
popCount 5 == 2
स्रोत
2016-10-20 23:16:01
मुझे प्रश्न समझ में नहीं आता है। – melpomene
@melpomene मैं जानना चाहता था कि हर बार 'रिपबिनारियो' कहलाता था, यह रिकर्सन मेरे जैसे नौसिखिया के लिए थोड़ा उलझन में था। नीचे दिए गए उत्तरों हालांकि हम वास्तव में उपयोगी हैं। – Tepes
उत्तर हम बहुत उपयोगी हैं, मैंने केवल एक ही नहीं चुना क्योंकि कुछ लोग शायद वही चीज़ ढूंढ रहे हों जो मैं था, वैसे भी, मैंने प्रत्येक उत्तर को ऊपर उठाने का फैसला किया क्योंकि उनमें से सभी ने समस्या को अलग तरीके से संरचित किया था और तो सवाल के परिणामस्वरूप विविधीकृत समाधान, सभी समान रूप से दिलचस्प। धन्यवाद। – Tepes