您的位置:首页 > 编程语言 > C语言/C++

新手保姆级解析C++解日历问题

2020-03-31 19:15 621 查看

新手保姆级解析C++解日历问题

题目描述:

​ 已知 2007 年 10 月 10 日,请求出 nnn 天后是几月几号

输入描述:

多组输入,每组输入为 111 行,为一个正整数 n(1<=n<=2000)

输出描述:

对于每组输入,输出格式为

yyyy-mm-dd
, 输出的值为 nnn 天后的日期

样例输入:

1

2

样例输出:

2007-10-11
2007-10-12

解题::

#include <iostream>
#include <iomanip>
using namespace std;
int Isyear(int n);
int num[2]={365,366};//定义一个一维数组,数组中保存着非闰年与闰年的日期
int mon[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{	int n;
cin>>n;
while(n)
{	int year =2007;//初始化年
int month=0;//初始化月份
n=n+283;//从2007年1月1日到2007年10月10日,需要度过283天.
//思路先确立年,如何确立,先从2007年开始,按照年份增加,当天数小于等于一年的总天数时,年份确立
for(year=2007;n>num[Isyear(year)];year++)//当Isyear返回值为1时num[1]=366,反之num[0]=365.
{
n-=num[Isyear(year)];
}//通过这个循环我们得到了这一年度过了多少天,如果n==0则日期为1月1日,以此类推
//思路此时年确立,现在确立月份
//闰年与非闰年,其月份中含有的日期是不同的
//现在我们来确立月份,当天数小于等于一个月的总天数时,月份确立.
for(month=0;n>mon[Isyear(year)][month];month++)
{
n-=mon[Isyear(year)][month];
}
month +=1;
cout<<year<<'-'<<setw(2)<<setfill('0')<<month<<"-"<<setw(2)<<setfill('0')<<n<<endl;
cin>>n;
}
return 0;
}
int Isyear (int n)
{
if(n%4==0&&n%100!=0||n%400==0)
return 1;
else	return 0;

}

不断学习,不断更新.
恳请大佬,多多指教.

  • 点赞
  • 收藏
  • 分享
  • 文章举报
客行 发布了9 篇原创文章 · 获赞 0 · 访问量 222 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: