两种日历间的转换,转换思路是将Haab日历转换为实际天数,然后再转换为Tzolkin日历。进制转换时需要注意,
取模时为了避免结果为0时的特殊情况,我们要采取一个小技巧。下面我举例说明:
假设每月有30天,每月日期编号从1开始(也就是说日期号为1~30),请问今年的第11天是几号?第60天呢?第61天呢?
回答上面的问题并不困难,可是程序中我们应该怎样计算呢?
(11-1)%30 + 1 = 11,因此第11天是11号;
(60-1)%30 + 1 = 30,因此第60天是30号;
(61-1)%30 + 1 = 1,因此第61天是1号。
由上面的例子我们不难总结出下面的公式:
假设进制为D,基数为b(只有b~D+b-1这些数字),对任何一个从1开始计数的数字N,在该进制下的余数r可以表示为:
r=(N-1)%D + b
代码
1import java.io.*;
2import java.util.*;
3import java.math.*;
4class Main
5{
6 private static TreeMap<String, Integer> haabmap = new TreeMap<String, Integer>();
7 private static String[] tmonth = {
8 "imix", "ik", "akbal", "kan", "chicchan",
9 "cimi", "manik", "lamat", "muluk", "ok",
10 "chuen", "eb", "ben", "ix", "mem",
11 "cib", "caban", "eznab", "canac", "ahau"
12 };
13
14 public static void main(String[] args)
15 {
16 getHaabmap();
17 Scanner sc = new Scanner(System.in);
18
19 int N = sc.nextInt();
20 sc.nextLine();
21 System.out.println(N);
22 for(int i = 0; i < N; i++)
23 {
24 String str1 = sc.nextLine();
25 String[] strArry = str1.split(" ");
26
27 int day = Integer.parseInt(
28 new String(strArry[0].toCharArray(), 0, strArry[0].length() - 1));
29 String month = strArry[1];
30 int year = Integer.parseInt(strArry[2]);
31
32 int allDays = day + 1;
33 allDays += (haabmap.get(month) - 1) * 20;
34 allDays += year * 365;
35
36 int tyear = (allDays - 1) / 260;//look here!!
37
38 int lastDays = (allDays - 1) % 260 + 1;//from 1
39 int forNumber = (lastDays - 1) % 13 + 1;//from 1
40 int forName = (lastDays - 1) % 20;//from 0
41 System.out.println(forNumber + " " + tmonth[forName] + " " + tyear);
42 }
43
44 }
45 public static void getHaabmap()
46 {
47 haabmap.put("pop", 1);
48 haabmap.put("no", 2);
49 haabmap.put("zip", 3);
50 haabmap.put("zotz", 4);
51 haabmap.put("tzec", 5);
52 haabmap.put("xul", 6);
53 haabmap.put("yoxkin", 7);
54 haabmap.put("mol", 8);
55 haabmap.put("chen", 9);
56 haabmap.put("yax", 10);
57 haabmap.put("zac", 11);
58 haabmap.put("ceh", 12);
59 haabmap.put("mac", 13);
60 haabmap.put("kankin", 14);
61 haabmap.put("muan", 15);
62 haabmap.put("pax", 16);
63 haabmap.put("koyab", 17);
64 haabmap.put("cumhu", 18);
65 haabmap.put("uayet", 19);
66 }
67}
68
posted on 2013-03-18 15:21
小鼠标 阅读(249)
评论(0) 编辑 收藏 引用 所属分类:
Java基础练习