snipt

Ctrl+h for KB shortcuts

Python

Incrementing a number without using - or +

1
2
3
4
5
6
7
    def increment(self, i):
        if i == ~1/2:
            return 0
        if i % 2 == 0:
            return i | 1
        else:
            return self.increment(i>>1)<<1 
https://snipt.net/embed/eb461423091190c30c1b581633db0140/
/raw/eb461423091190c30c1b581633db0140/
eb461423091190c30c1b581633db0140
python
Python
7
2019-07-07T11:43:37
True
False
False
/api/public/snipt/17975/
incrementing-a-number-without-using-or
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1">1</a> <a href="#L-2">2</a> <a href="#L-3">3</a> <a href="#L-4">4</a> <a href="#L-5">5</a> <a href="#L-6">6</a> <a href="#L-7">7</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a> <span class="k">def</span> <span class="nf">increment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span> </span><span id="L-2"><a name="L-2"></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="o">~</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">:</span> </span><span id="L-3"><a name="L-3"></a> <span class="k">return</span> <span class="mi">0</span> </span><span id="L-4"><a name="L-4"></a> <span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> </span><span id="L-5"><a name="L-5"></a> <span class="k">return</span> <span class="n">i</span> <span class="o">|</span> <span class="mi">1</span> </span><span id="L-6"><a name="L-6"></a> <span class="k">else</span><span class="p">:</span> </span><span id="L-7"><a name="L-7"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">increment</span><span class="p">(</span><span class="n">i</span><span class="o">&gt;&gt;</span><span class="mi">1</span><span class="p">)</span><span class="o">&lt;&lt;</span><span class="mi">1</span> </span></pre></div> </td></tr></table>
bitshifting, increment, recursive