兩種日歷間的轉換,轉換思路是將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
小鼠標 閱讀(257)
評論(0) 編輯 收藏 引用 所屬分類:
Java基礎練習