110,552
社区成员
发帖
与我相关
我的任务
分享
using System;
class Program
{
static void Main()
{
foreach (int n in new int[] { int.MinValue, 0, 1, 2, 3, int.MaxValue - 1, int.MaxValue, -1, -2, -3, int.MinValue+2, int.MinValue+1 })
{
Console.Write("n = {0,-12} f(n) = {1,-12} f(f(n)) = {2,-12} ", n, f(n), f(f(n)));
Console.Write((long)f(f(n)) == -(long)n ? "OK" : "ERROR");
Console.WriteLine();
}
}
static int f(int n)
{
if (n == 0) return -int.MaxValue;
if (n == int.MaxValue) return 0;
if ((n & 1) == 0) return Math.Sign(n) - n;
return Math.Sign(n) + n;
}
}
/* 程序输出:
n = -2147483648 f(n) = 2147483647 f(f(n)) = 0 ERROR
n = 0 f(n) = -2147483647 f(f(n)) = -2147483648 ERROR
n = 1 f(n) = 2 f(f(n)) = -1 OK
n = 2 f(n) = -1 f(f(n)) = -2 OK
n = 3 f(n) = 4 f(f(n)) = -3 OK
n = 2147483646 f(n) = -2147483645 f(f(n)) = -2147483646 OK
n = 2147483647 f(n) = 0 f(f(n)) = -2147483647 OK
n = -1 f(n) = -2 f(f(n)) = 1 OK
n = -2 f(n) = 1 f(f(n)) = 2 OK
n = -3 f(n) = -4 f(f(n)) = 3 OK
n = -2147483646 f(n) = 2147483645 f(f(n)) = 2147483646 OK
n = -2147483647 f(n) = -2147483648 f(f(n)) = 2147483647 OK
*/
n = -2147483648 f(n) = 2147483647 f(f(n)) = 0 ERROR // -2147483648 看作 -0
n = 0 f(n) = -2147483647 f(f(n)) = -2147483648 ERROR // -2147483648 看作 -0
class foo {
unsigned int i;
public:
foo(): i(0) {} // 构造函数将i置0
int operator()(int n) // 重载()运算符,即函数对象的必要条件
{
if (i++ % 2) // 根据内部i的状态,调用()时一次不变,一次取相反数,最后的效果总是两次调用会取相反数
return n;
else
return -n;
}
};
foo f;
int x;
f(f(x)) == -x;