挑战 f(f(n)) = -n
源起:http://topic.csdn.net/u/20090525/17/4d0cb4ed-b503-42b6-b7d3-3528b3aaebf7.html
设计一个函数 f,使得
f(f(n)) = -n
规定 f(n) 的定义域和值域都是 8 比特的有符号整数,其范围:-128 ~ 127。
显然,n = -128 时无法满足要求,因为其相反数 128 已经超出范围。
现在请问,能否做到对其余的 n 都满足上式。
也就是说,想办法使以下程序的输出为空:
(注意,您只能在 // TODO 处写语句,不能改动程序的其余任何部分)
- C# code
using System;using tiny = System.SByte;class FFN{ static void Main() { for (tiny ffn, n = tiny.MaxValue; n > tiny.MinValue; n--) if ((long)(ffn = f(f(n))) != -(long)n) Console.WriteLine("n={0} ffn={1} ERROR", n, ffn); } static tiny f(tiny n) { // TODO: 在这里发挥您的聪明才智。 }}
[解决办法]
- C# code
static sbyte f(sbyte n) { System.Diagnostics.StackFrame sf = new System.Diagnostics.StackFrame(1); if (sf.GetILOffset() > 6) return (sbyte)-n; else return n; }
[解决办法]
- C# code
static tiny f(tiny n) { if (Console.Title.EndsWith(".")) { Console.Title = Console.Title.Substring(0, Console.Title.Length - 1); return (tiny)(-n); } else { Console.Title += "."; return n; } }