6 ms·
Calculate n + 1 without using + or - or * or /
As the title asks! My buddy came across this while preparing for an interview.
All I could think of is implementing a full adder in software but I'm thinking there has to be a better solution...help!
- kirillzubovsky 15y agoGoogle quickly reveals this - http://nscraps.com/C/892-c-program-add-two-numbers-without-using-plus-symbol.htm http://nscraps.com/C/892-c-program-add-two-numbers-without-u...
- hasenj 15y agoI don't think this counts; it is using the sum operation, even if the operator doesn't look like +
- awaage 15y agohow about this (example in ruby): def plus_1(x); arr = []; arr[x] = true; return arr.size; end
- kirillzubovsky 15y agoFunny, this is the first thing I thought of, but then realized it would only work if x>0
- awaage 15y agooops! good catch!
- custominstall 15y agolol .. but also wont work for decimals
- KeithMajhor 15y agoArbitrary addition, subtraction and multiplication without arithmetic signs. 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; }
- alexl1988 15y agoint 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; }
- code4pizza 15y agodata Nat = Zero | Succ n plus1 = Succ Probably not the answer they were looking for, but it was the first thing that came into my head.
- LarryA 15y agoCould do lookup tables like the old CADET system did. http://www.websters-online-dictionary.org/definitions/IBM+1620?cx=partner-pub-0939450753529744%3Av0qd01-tdlq&cof=FORID%3A9&ie=UTF-8&q=IBM+1620&sa=Search#922 http://www.websters-online-dictionary.org/definitions/IBM+16... 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.
- bobwebb 15y agodef add_1(x): return sum([1,x]) 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.
- deleted 15y ago[deleted]
- icebraining 15y agoI have the proper Enterprise version: 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)
- namank 15y agoI'm pretty sure that's not a valid solution. Its the same as using Math.sum(). While it evaluates your resourcefulness, the point of the question, I think, is to figure out your knowledge and creative thinking
- custominstall 15y agophp solution provided number is a positive int : round($n.'.9')
- anujkk 15y agoIf it is just about not using +,-,* or / operators, we can do it by using "++" operator. x=n++;
- alecbenzer 15y agoif n is an integer, I believe this works: https://gist.github.com/1063990 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.
- veyron 15y agoBasically replicate the carry process in the form of bit ops: 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 n