题目连结:http://tioj.infor.org/problems/1026
题目的意思是当开始走路后,第一步是一公尺,每次步伐是上一次的两倍,目标的公尺距离是奇数,并且可以往前和往后走。
每次步伐的距离因为都是2倍,刚好跟二进位的算法是一样的,不过二进位是用累加方式计算,本题有加有减,但是只要转换一下想法,因为刚好是两倍,所以下一步减现在这一步会等于这一步的距离,所以只要把二进位为0的部分变成1,然后右边一阶变成0,就可以跟二进位一样的算法了。
由于本题输入是奇数,所以二进位最右边必定为1可以不必判断。
string input = Console.ReadLine();long length = 0;List<string> direct = new List<string>();if (Int64.TryParse(input, out length)){ if(length > 0) length /= 2; for (long remainder = length % 2; length > 0; length /= 2, remainder = length % 2) { direct.Add(remainder == 0? "-" : "+"); if (length / 2 == 0) direct.Add("+"); } Console.WriteLine("{0}\n{1}", direct.Count, string.Join(" ", direct.ToArray()));}