两种日历间的转换,转换思路是将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

代码
1
import java.io.*;
2
import java.util.*;
3
import java.math.*;
4
class 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
小鼠标 阅读(254)
评论(0) 编辑 收藏 引用 所属分类:
Java基础练习