| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 495 人关注过本帖
标题:为万年历写的几个有用的小方法,供大家参考讨论
取消只看楼主 加入收藏
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
结帖率:100%
收藏
 问题点数:0 回复次数:0 
为万年历写的几个有用的小方法,供大家参考讨论
int day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int first_day = 0;
int add_value = 0;
char *week[7] = {"周日", "周一","周二","周三","周四","周五","周六"};

//计算输入年份是否为闰年
bool isLeap(int year)
{
    return ((year % 400 == 0) || (year % 100 != 0 && year % 4 == 0));
}

//计算输入年份第一天是星期几
void Init(int year)
{
    add_value = isLeap(year);
    day[1] = 28 + add_value;//如果输入年为闰年,2月份的天数为29
    first_day = (year + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;//计算出输入年第一天为周几
}

//计算到输入年份的当前月的距离
int get_distance(int month)
{
    //初始化一个数组,保存每个月的距离,同时考虑了闰年和平年的不同情形
    int distance[12] = {0, 31, 59 + add_value, 90 + add_value, 120 + add_value,
                        151 + add_value, 181 + add_value, 212 + add_value,
                        243 + add_value, 273 + add_value, 304 + add_value, 334 + add_value};
    return distance[month - 1];
}

//计算输入的日期是星期几
int get_current_day(int year, int month, int date)
{
    //注释掉的方法已被get_distance(int month)替代
    /*int total = 0;
    for(int i = 0 && month > 1; i <= month - 2; i++)
    {
        total += day[i];
    }*/

    int currenet_day = 0;
    Init(year);
    int total = get_distance(month);
    currenet_day = ( first_day + total + date - 1) % 7;
    return currenet_day;
}

//将获取的current_day转换成字符串形式
char* convert_to_string(int current_day)
{
    return week[current_day];
}

int count_leap(int year)
{
    //具体的算法是计算出能被4整除的数个数与能被400整除的数个数之和(就是闰年的个数),再减去能被100整除的数个数(就是同时能被4和400整除的数个数)
    //这样就能获得截止到输入年的闰年的个数
    return year / 4 + year / 400 - year / 100;
    //注释掉的方法已被return year / 4 + year / 400 - year / 100; 替代
    /*int total = 0;
    for(int i = 1; i <= year; i++)
    {
        if(isLeap(i))
            total++;
    }
    return total;*/
}
假如高手有更好的方法,请不吝赐教,如果只有口水,免开尊口。如果有不明白的地方,我会尽力解答。总之大家一起讨论交流,共同提高。
搜索更多相关主题的帖子: 万年历 
2010-07-17 22:58
快速回复:为万年历写的几个有用的小方法,供大家参考讨论
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024042 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved