标签:原来 世纪 1年 oar color sed 解法 2017年 private
最近见到类似的内容,于是闲着无聊花了半个晚上写了判断多少年间有多少这样的天数。
思路是这样的:
先把当前的日期由年月日分开,然后统计年月日的位数,然后反过来再根据位数创建新的日期,并和原来的比较。最后天数加一不断循环。
但是,也有一点问题,比如1年1月10日是1110反过来是 0111,分开变成01-1-1,但是创建的时候01会导致错误,我就直接写了try catch专门让这个判断出错,因为10号反过来不可能有相同的。
结果是1年到9999年一共有4286天翻转相同。
21世纪一共有10天,也正好是国庆这几天。
最后上代码,可能写的有些地方不够好,浪费了不少时间:
namespace DateSwap { class MainClass { public static void Main() { DateTime date = new DateTime(1, 1, 1); int count = 0; Dictionary<string, int> dic = new Dictionary<string, int>(); for (;;) { if (date.Year == 9999 && date.Month == 12 && date.Day == 31) break; int ysize = 0, msize = 0, dsize = 0; string defaultDateString = DateTimeToString(date); //将各部分分开 string[] ns = defaultDateString.Split(‘a‘); //得到各个部分的长度 ysize = ns[0].Length; msize = ns[1].Length; dsize = ns[2].Length; //去掉本来的a,然后翻转 string removed = defaultDateString.Replace("a", ""); string changed = ReverseToArray(removed); DateTime ReverseDate = ReverseDateTime(changed, ysize, msize, dsize); if (date == ReverseDate) { Write(date.ToString("yyyy-MM-dd") + "\t" + ReverseDate.ToString("yyyy-MM-dd") + "\t"); WriteLine(date == ReverseDate); count++; string s = date.ToString("yyyy"); } date = date.AddDays(1); } WriteLine(count); } private static string DateTimeToString(DateTime date) { return date.Year.ToString() +"a"+ date.Month.ToString() +"a"+ date.Day.ToString(); } public static string ReverseToArray(string date) { char[] c = date.ToCharArray(); Array.Reverse(c); return new string(c); } public static DateTime ReverseDateTime(string dateString, int ysize, int msize, int dsize) { List<char> list = new List<char>(); for (int i = 0; i < ysize; i++) list.Add(dateString[i]); string year = new string(list.ToArray()); list.Clear(); for (int i = ysize; i < msize + ysize; i++) list.Add(dateString[i]); string month = new string(list.ToArray()); list.Clear(); for (int i = ysize + msize; i < msize + ysize + dsize; i++) list.Add(dateString[i]); string day = new string(list.ToArray()); list.Clear(); DateTime newdate; try { newdate = new DateTime(int.Parse(year), int.Parse(month), int.Parse(day)); } catch(Exception) { newdate = new DateTime(9999, 12, 31, 1, 12, 3); } return newdate; } } }
标签:原来 世纪 1年 oar color sed 解法 2017年 private
原文地址:http://www.cnblogs.com/himself65/p/7625383.html