读书人

挑战 f(f(n)) = -n,该如何处理

发布时间: 2012-01-05 22:36:54 作者: rapoo

挑战 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;            }        } 

读书人网 >C#

热点推荐