用c实现农历转换

#include<stdio.h>

int main()
{
    int year, month, day;
    int leap = 0, i, temp = 0;
    int lunar_month, lunar_day;
    int sum = 0;
    int gan_index, zhi_index;

    char ganzhi[60][10]={
        "甲子","乙丑","丙寅","丁卯","戊辰","己巳","庚午","辛未","壬申","癸酉",
        "甲戌","乙亥","丙子","丁丑","戊寅","己卯","庚辰","辛巳","壬午","癸未",
        "甲申","乙酉","丙戌","丁亥","戊子","己丑","庚寅","辛卯","壬辰","癸巳",
        "甲午","乙未","丙申","丁酉","戊戌","己亥","庚子","辛丑","壬寅","癸卯",
        "甲辰","乙巳","丙午","丁未","戊申","己酉","庚戌","辛亥","壬子","癸丑",
        "甲寅","乙卯","丙辰","丁巳","戊午","己未","庚申","辛酉","壬戌","癸亥"
    };

    char shengxiao[12][10]={
        "鼠","牛","虎","兔","龙","蛇",
        "马","羊","猴","鸡","狗","猪"
    };

    char shu[12][10]={
        "一","二","三","四","五","六","七","八","九","十","十一","十二"
    };

    char ri[31][10]={
        "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
        "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
        "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"
    };

    char jieri[24][10]={
        "元旦","情人节","清明节","劳动节","端午节","七夕节",
        "中秋节","国庆节","万圣节","Christmas","跨年"
    };

    char yue[12][10]={
        "正","二","三","四","五","六","七","八","九","十","冬","腊"
    };

    printf("请输入公历年月日:\n");
    scanf("%d %d %d", &year, &month, &day);

    if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        leap = 1; // 判断是否为闰年

    for (i = 1900; i < year; i++){
        if((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
            temp += 366; // 计算年份总天数
        else
            temp += 365;
    }

    for (i = 1; i < month; i++){
        switch(i){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12: sum += 31; break;
            case 4:
            case 6:
            case 9:
            case 11: sum += 30; break;
            case 2: sum += 28 + leap; break;
        }
    }

    sum += day - 1; // 到当月几号的天数
    temp += sum; // 当年总天数

    lunar_day = temp % 29 + 1;
    lunar_month = temp % 12;

    if (lunar_day == 1 && lunar_month == 0)
        printf("\n%d年为甲子年(鼠年)\n", year);

    if (lunar_day == 1 && lunar_month == 6)
        printf("\n%d年为丙午年(马年)\n", year);

    if (lunar_day == 1 && lunar_month == 8)
        printf("\n%d年为戊戌年(狗年)\n", year);

    gan_index = (year-4)%10;
    zhi_index = (year-4)%12;
    printf("公历%s年,", year);
    printf("农历%s%s年,",ganzhi[gan_index*12+zhi_index], shengxiao[zhi_index]);

    if (lunar_day == 1)
        printf("农历%s年。", shu[lunar_month]);
    else
        printf("农历%s%s。", yue[lunar_month], ri[lunar_day-1]);

    if (month == 1 && day == 1)
        printf("\n今天是元旦。\n");
    else if (month == 2 && day == 14)
        printf("\n今天是情人节。\n");
    else if (month == 4 && day == 4)
        printf("\n今天是清明节。\n");
    else if (month == 5 && day == 1)
        printf("\n今天是劳动节。\n");
    else if (month == 5 && (day == 5 || day == 6 || day == 7))
        printf("\n今天是端午节。\n");
    else if (month == 7 && day == 7)
        printf("\n今天是七夕节。\n");
    else if (month == 8 && day == 15)
        printf("\n今天是中秋节。\n");
    else if (month == 10 && day == 1)
        printf("\n今天是国庆节。\n");
    else if (month == 10 && day == 31)
        printf("\n今天是万圣节。\n");
    else if (month == 12 && day == 25)
        printf("\n今天是Christmas。\n");
    else if (month == 12 && day == 31)
        printf("\n今天是跨年。\n");
    else
        printf("\n今天不是节日哦。\n");

    return 0;
}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值