C++实现通过年份与天数判断月份日期

来源:互联网 发布:java电商项目视频教程 编辑:程序博客网 时间:2024/05/01 20:28

近期为了准备CCF认证考试,自己随便练习遇到的一道经典题,所以写下来,自己的思路想法。
先把题目列出来
给定一个年份y和一个整数d,问这一年的第d天是几月几日?
注意闰年的2月有29天。满足下面条件之一的是闰年:
1)年份是4的整数倍,而且不是100的整数倍;
2)年份是400的整数倍。
输入格式
第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。
输出格式
输出两行,每行一个整数d,d在1至365之间。
样例输入
2015
80
样例输出
3
21
再上代码,如果某些人需要,这样就不用看后面了!

#include<iostream>using namespace std;bool isRunyear(int year){    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)    {        return true;    }    else{        return false;    }}int main(){    int year;    cin >> year;    int day;    cin >> day;    bool bl;    bl = isRunyear(year);    int iArr[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };    int count = 0,count1=0;    if (bl==true)    {        //表明是闰年        iArr[1] = 29;        for (int i = 0; i < 12; i++)        {            count1 = count;            count += iArr[i];            if (day>count1&&day <= count){                cout << i+1 << endl;                cout << day - count1 << endl;                break;            }        }    }    else{        //表明是平年        for (int i = 0; i < 11; i++)        {            count1 = count;            count += iArr[i];            if (day>=count1&&day <= count){                cout << i + 1 << endl;                cout << day - count1 << endl;                break;            }    //      else if (day == count){    //      cout << i + 1 << endl;    //      cout << day - count1 << endl;    //      }        }    }    return 0;}

接着是运行结果:
前面两行是你输入的数据,后面的是输出结果
(http://img.blog.csdn.net/20160902160654748)
这里为使整个结构看得更清晰一点,我把是不是闰年单拿出来,写成外部函数。很简单的一段,我就不详细说了。主要是下面判断几月份以及具体哪一天的时候是关键点:
首先,把平年的每个月到底有几天,以数组的形式存起来,在下面的判断是不是闰年之后,直接改变iArr[1](即二月份的天数)的值。用两个计数变量,是用来保存加iArr[i]之前与加之后的两个值,这样虽然声明的变量多了,占的空间多了,但至少思路更清晰,更容易明白。

    for (int i = 0; i < 12; i++)        {            count1 = count;            count += iArr[i];            if (day>count1&&day <= count){                cout << i+1 << endl;                cout << day - count1 << endl;                break;            }        }
for循环是为了累加,当你输入的d数据恰好大于加iArr[i]之前的值,又小于加完以后的天数时,说明找到了那个临界点,由于i 还是下标,所以加一,就能得到月份,day-count1就恰好是那个月的第几天了。这里还有个注意事项,就是临界状态,你所输入的数据,恰好是某个月最后一天,这样所单独拿出来,测试了一下:
    //      else if (day == count){    //      cout << i + 1 << endl;    //      cout << day - count1 << endl;    //      }

后来一看,跟把它直接加入到上面的循环判断的时候一样,所以,就注释掉了。
当然,这份代码还有好多没有考虑到:
比如:输入的数据是否符合要求,年份,天数,都要进行判断,还要尽可能的简化代码。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小羊羔站不起来怎么办 兔子不让小兔子吃奶怎么办 兔子不吃东西没精神怎么办 母兔没有初奶怎么办 兔子只喝水不吃东西怎么办 兔子不吃东西也不喝水怎么办 兔子怀孕后不爱吃东西喝水怎么办 母兔产仔无奶怎么办 仔兔十五天母兔没奶怎么办 兔子刚生下兔宝宝该怎么办 兔子不吃草超瘦怎么办 兔子喝水喝多了怎么办 狗吃了变质食物怎么办 狗崽20天没睁眼怎么办 刚生的小狗缺氧怎么办 狗狗生出来了怎么办 刚生的小狗狗死了怎么办 母狗生的死狗怎么办 狗生宝宝都死了奶水怎么办 狗狗生出来不动怎么办 兔子喝了84水怎么办 小狗喝了84水怎么办 天气热宝宝不爱喝水怎么办 狗脐带掉了出血怎么办 刚生的小狗没奶怎么办 家兔在笼子里下崽怎么办 小兔子不吃东西 精神不好怎么办 兔子要生宝宝了怎么办 宝宝让兔子咬了怎么办 兔子的右耳坏了怎么办 被小兔子咬了怎么办 打老鼠被老鼠咬了了怎么办 制作棒棒糖时木棍翘起怎么办 兔子被打后怕我怎么办 兔子后腿摔断了怎么办 兔子腿骨头断了怎么办 减肥老是控制不住吃怎么办 不爱吃主食爱吃零食怎么办 猫咪奶涨的很硬怎么办 斩魂技能乱加的怎么办 狗狗不吃东西还拉稀怎么办