7-3 干支纪年法 (100 分)

中国农历采取天干地支作为计算年,月,日,时的方法,就是把每一个天干和地支按照一定的顺序而不重复地搭配起来,用来作为纪年,纪月,纪日,纪时的代号。把“天干”中的一个字摆在前面,后面配上“地支”中的一个字,这样就构成一对干支。如果“天干”以“甲”字开始,“地支”以“子”字开始顺序组合,就可以得到:

1.甲子 2.乙丑 3.丙寅 4.丁卯 5. 戊辰 6.已巳 7.庚午 8.辛未 9.壬申 10.癸酉11. 甲戌 12.乙亥 13.丙子 14.丁丑 15.戊寅 16.已卯 17.庚辰 18.辛巳 19.壬午 20.癸未21.甲申 22.乙酉 23.丙戌 24.丁亥 25.戊子 26.已丑 27.庚寅 28.辛卯 29.壬辰 30.癸巳31.甲午 32.乙未 33.丙申 34.丁酉 35.戊戌 36.已亥 37.庚子 38.辛丑 39.壬寅 40.癸卯41.甲辰 42.乙巳 43.丙午 44.丁未 45.戊申 46.已酉 47.庚戌 48.辛亥 49.壬子 50.癸丑51.甲寅 52.乙卯 53.丙辰 54.丁巳 55.戊午 56.已未 57.庚申 58.辛酉 59.壬戌 60.癸亥

这六十对干支,天干经六个循环,地支经五个循环正好是六十,就叫做“六十干支”。按照这样的顺序每年用一对干支表示,六十年一循环,叫做“六十花甲子”。如2013年是癸巳年,1990是庚午年;从1984年的甲子年,到2044年又是甲子年。这种纪年方法就叫做“干支纪年法”,一直沿用到今天。历史上的辛亥革命、戊戌变法等说法均源于此。

假设我们用0-9依次代替10个天干,A-L依次代替12个地支,现在请你写一段程序,根据给定的年份算出其干支纪年法所对应的年份。

输入格式:

第1 行是测试数据的组数T(0<T<100)。后面跟着T 行测试用例,每行一个正整数n(1000<n<3000),代表公元纪年法的年份。

输出格式:

T行,每行对应一个测试用例,为该年份所对应的干支纪年法的年份(相应的字符表示)。

输入样例:

3
1984
1990
2044

输出样例:

0A
6G
0A
#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int i;
	int y[n];
	for(i=0;i<n;i++)
	{
		scanf("%d",&y[i]);
	}
	for(i=0;i<n;i++)
	{
		int m;
		m=y[i]%60;
		if(m<3)
		m=m-3+60;
		else
		m-=3;
		int p,q;
		p=m%10;
		if(p==0)
		p=9;
		else
		p-=1;
		q=m%12;
		if(q==0)
		q=11;
		else
		q-=1;
		switch(p)
		{
			case 0:printf("0");break;
			case 1:printf("1");break;
			case 2:printf("2");break;
			case 3:printf("3");break;
			case 4:printf("4");break;
			case 5:printf("5");break;
			case 6:printf("6");break;
			case 7:printf("7");break;
			case 8:printf("8");break;
			case 9:printf("9");break;
		};
		switch(q)
		{
			case 0:printf("A\n");break;
			case 1:printf("B\n");break;
			case 2:printf("C\n");break;
			case 3:printf("D\n");break;
			case 4:printf("E\n");break;
			case 5:printf("F\n");break;
			case 6:printf("G\n");break;
			case 7:printf("H\n");break;
			case 8:printf("I\n");break;
			case 9:printf("J\n");break;
			case 10:printf("K\n");break;
			case 11:printf("L\n");break;
		}
	}
	return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆水獭_(:_」∠)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值