Calculate n + 1 without using + or - or * or /
All I could think of is implementing a full adder in software but I'm thinking there has to be a better solution...help!
All I could think of is implementing a full adder in software but I'm thinking there has to be a better solution...help!
int add( int a, int b ) { while ( a ) { int c = a & b; b ^= a; a = c << 1; } return b; }
int sub( int a, int b ) { return add( a, add( ~b, 1 ) ); }
int mul( int a, int b ) { int c = 0; while ( a ) { if ( a & 1 ) c = add( c, b ); a >>= 1; b <<= 1; } return c; }
def increment(a):
import urllib2
url = "http://www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx/Add?a=%d&b=1" % a
result = urllib2.urlopen(url).read()
from xml.dom.minidom import parseString
result = parseString(result)
return int(result.getElementsByTagName('int')[0].childNodes[0].data) int inc(int a) {
int mask = ~a;
/* Assuming a is 32-bit. If 64-bit, add 32-bit shift. */
mask |= mask << 1;
mask |= mask << 2;
mask |= mask << 4;
mask |= mask << 8;
mask |= mask << 16;
/* Take the longest run of 1s from the right of a.
* mask has 0s there and 1s everywhere else. We want
* to set the next bit to 1 and set the ones after
* to 0. */
return (a | ~(mask << 1)) & mask;
}In some situations you may be data rich but function poor. Like embedded devices where you have a limited instruction set, 128bytes of RAM, but access to megs of ROM for program/data.
def inc(n):
x = 1
while n & 1 == 1:
n = n >> 1
x = x << 1
n = n | 1
while not x == 1:
x = x >> 1
n = n << 1
return nx=n++;
round($n.'.9')
plus1 = Succ
Probably not the answer they were looking for, but it was the first thing that came into my head.
Python.
Too simple? I didn't use any of the signs, and it demonstrates knowledge of the python standard library!
EDIT: Whoops, seems the idea of using the sum() function (or operator) has been dismissed elsewhere. Time to study some more languages, I think.
https://gist.github.com/1063990
uses only bit shits, bitwise XOR, and bitwise AND
I would imagine they meant not to use the operations, not just the symbols.