int f(int n) {if (n & (1 << 31)) // highest bit set?return -(n & ~(1 << 31)); // return negative of original nelsereturn n | (1 << 31); // return n with highest bit set}
def f(x) :if isinstance(x, tuple) :# return a number.if x[0] != 0 :raise ValueError # make sure the tuple is well formed.else :return ( -x[1] )
elif isinstance(x, int ) :if x == int(-2**31 ):# This value won't satisfy the functional relation in# signed 2s complement 32 bit integers.raise ValueErrorelse :# send this integer to a tuple (representing ix)return( (0,x) )else :# not an int or a tupleraise TypeError
所以将f应用于37两次得到-37,反之亦然:
>>> x = 37>>> x = f(x)>>> x(0, 37)>>> x = f(x)>>> x-37>>> x = f(x)>>> x(0, -37)>>> x = f(x)>>> x37
将f两次应用于零得到零:
>>> x=0>>> x = f(x)>>> x(0, 0)>>> x = f(x)>>> x0
我们处理一个问题没有解决方案的情况(在int32中):
>>> x = int( -2**31 )>>> x = f(x)
Traceback (most recent call last):File "<pyshell#110>", line 1, in <module>x = f(x)File "<pyshell#33>", line 13, in fraise ValueErrorValueError
f2: n -> (2 abs(n) +1, 2 sign( n) ) if n is int32, and not minint.f2: (x, y) -> sign(y) * (x-1) /2 (provided y is \pm 2 and x is not more than 2maxint+1
int f (int n){//if countstatic int count = 0;
if (count == 0){count = 1;return n;}
if (n == 0)return 0;else if (n > 0){count = 0;return abs(n)*(-1);}else{count = 0;return abs(n);}}
int main(){int n = 42;std::cout << f(f(n))}
struct ImplicitlyConvertibleToInt{operator int () const { return 0; }};
int f(const ImplicitlyConvertibleToInt &) { return 0; }
ImplicitlyConvertibleToInt f(int & n){n = 0; // The problem specification didn't say n was constreturn ImplicitlyConvertibleToInt();}
n = n ^ (1 << 30); //flip the bitif (n>0)// if negative then there's a two's complement{if (n & (1<<30)){return n;}else{return -n;}}else{if (n & (1<<30)){return -n;}else{return n;}}
}
long long f(long long n){int high_int = n >> 32;int low_int = n & 0xFFFFFFFF;
if (high_int == 0) {return 0x100000000LL + low_int;} else {return -low_int;}}
int main(){int n = -256; // 32-bit signed integerprintf("%d", f(f(n)));}
int f(int n){static int x = 0; // not returning negative;switch(x){case 0:x = 1;return n;break;
case 1:x = 0;return -n;break;default:return -999;break;}}
int f(int n) /* Treats numbers in the range 0XC0000000 to 0X3FFFFFFF as valid togenerate f(f(x)) equal to -x. If n is within this range, it willproject n outside the range. If n is outside the range, it willreturn the opposite of the number whose image is n. */{return n ? n > 0 ? n <= 0X3FFFFFFF ? 0X3FFFFFFF + n : 0X3FFFFFFF - n :\n >= 0XC0000000 ? 0XC0000000 + n : 0XC0000000 - n : 0;}