设计一个程序输入两个日期计算相隔多少天,或计算一个日期加上间隔后的日期。
2017-02-24 18:14
351 查看
设计一个程序能计算日期的间隔,如输入两个日期别为2008-2-3 和 2008-3-9 计算相隔多少天,或2008-2-3加上间隔天数之后的日期。
题目不难,但是老是想的不全面,改了无数次了。。。
1.计算两个日期相隔的天数。
1).首先判断是不是同一年,如果是同一年,判断是否是闰年,如果是闰年,判断包不包括二月份....2).之后判断是否是同一个月,
2.一个日期加上间隔天数之后的日期。
首先判断是不是闰年以及二月份,如果是则--day,之后年数加一,继续判断,
#include <iostream>
using namespace std;
bool isleapyear(int y)
{
return ((y % 4 == 0 && y % 100 != 0 )|| y % 400 == 0);
}
int sum(int y1, int m1, int d1,int y2, int m2, int d2)
{
int md[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//假设从0年开始,也就是你不知道的第一天, 比如求x-y就等于求(x-0)-(y-0)
int count=0,temp=m1;
if(y1==y2&&m1==m2)
count+=d2-d1;
else
{
for(int i=y1;i<y2;)
{
if (temp==2 && isleapyear(i))
count++;
count+=md[temp]-d1;
d1=0;
temp++;
//cout<<count<<" "<<temp<<" "<<md[temp]<<endl;
if(temp==13)
{
i++;
temp=1;
}
/*if (temp==2 && isleapyear(i))
md[temp]++; */
}
while(temp<m2)
{
count+=md[temp];
++temp;
}
count+=d2;
}
return count;
}
int main()
{
int y1,y2,m1,m2,d1,d2,key,y,m,d;
while(1){
cout<<"请输入功能:1.计算两个日期之间的时间间隔;2.计算一个日期加上间隔天后的日期。"<<endl;
cin>>key;
if(key==1)
{
cout<<"请输入起始日期:"<<endl;
cin>>y1>>m1>>d1;
cout<<"请输入终止日期:"<<endl;
cin>>y2>>m2>>d2;
cout<<sum(y1, m1, d1, y2, m2, d2)<<endl;
}
if(key==2)
{
int md[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//假设从0年开始,也就是你不知道的第一天, 比如求x-y就等于求(x-0)-(y-0)
cout<<"请输入日期:"<<endl;
cin>>y>>m>>d;
cout<<"请输入间隔:"<<endl;
int day;
cin>>day;
cout<<"加上"<<day<<"天,结果:"<<endl;
int temp1=y;
if (m==2 && isleapyear(y))
--day;
while(day>md[m]-d)
{
day-=md[m]-d;
d=0;
m++;
//cout<<day<<" "<<m<<" "<<md[m]<<endl;
if(m==13)
{
++temp1;
m=1;
}
if (m==2 && isleapyear(temp1)&&day>28)
--day;
//md[m]++;
}
d+=day;
cout<<temp1<<" "<<m<<" "<<d<<endl;
}
}
return 0;
}
题目不难,但是老是想的不全面,改了无数次了。。。
1.计算两个日期相隔的天数。
1).首先判断是不是同一年,如果是同一年,判断是否是闰年,如果是闰年,判断包不包括二月份....2).之后判断是否是同一个月,
2.一个日期加上间隔天数之后的日期。
首先判断是不是闰年以及二月份,如果是则--day,之后年数加一,继续判断,
#include <iostream>
using namespace std;
bool isleapyear(int y)
{
return ((y % 4 == 0 && y % 100 != 0 )|| y % 400 == 0);
}
int sum(int y1, int m1, int d1,int y2, int m2, int d2)
{
int md[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//假设从0年开始,也就是你不知道的第一天, 比如求x-y就等于求(x-0)-(y-0)
int count=0,temp=m1;
if(y1==y2&&m1==m2)
count+=d2-d1;
else
{
for(int i=y1;i<y2;)
{
if (temp==2 && isleapyear(i))
count++;
count+=md[temp]-d1;
d1=0;
temp++;
//cout<<count<<" "<<temp<<" "<<md[temp]<<endl;
if(temp==13)
{
i++;
temp=1;
}
/*if (temp==2 && isleapyear(i))
md[temp]++; */
}
while(temp<m2)
{
count+=md[temp];
++temp;
}
count+=d2;
}
return count;
}
int main()
{
int y1,y2,m1,m2,d1,d2,key,y,m,d;
while(1){
cout<<"请输入功能:1.计算两个日期之间的时间间隔;2.计算一个日期加上间隔天后的日期。"<<endl;
cin>>key;
if(key==1)
{
cout<<"请输入起始日期:"<<endl;
cin>>y1>>m1>>d1;
cout<<"请输入终止日期:"<<endl;
cin>>y2>>m2>>d2;
cout<<sum(y1, m1, d1, y2, m2, d2)<<endl;
}
if(key==2)
{
int md[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//假设从0年开始,也就是你不知道的第一天, 比如求x-y就等于求(x-0)-(y-0)
cout<<"请输入日期:"<<endl;
cin>>y>>m>>d;
cout<<"请输入间隔:"<<endl;
int day;
cin>>day;
cout<<"加上"<<day<<"天,结果:"<<endl;
int temp1=y;
if (m==2 && isleapyear(y))
--day;
while(day>md[m]-d)
{
day-=md[m]-d;
d=0;
m++;
//cout<<day<<" "<<m<<" "<<md[m]<<endl;
if(m==13)
{
++temp1;
m=1;
}
if (m==2 && isleapyear(temp1)&&day>28)
--day;
//md[m]++;
}
d+=day;
cout<<temp1<<" "<<m<<" "<<d<<endl;
}
}
return 0;
}
相关文章推荐
- 作业五-设计一个程序计算输入的两个数的和与差,要求自定义一个函数 sum_diff(float op1, float op2, float *psum, float *pdiff),其中 op1 和 op2 是输入的两个数,*psum 和*pdiff 是计算得出的和与差.
- 1.编写一个简单的C语言程序:计算输入多个整数的平均值,并将此程序分割成多个小文件。 2.为第1题中的程序编写makefile文件,用make编译后改成返回最小值,再编译,观察有多少文件不需要重新
- 计算出两个日期相隔多少天
- 简单编程(三)编写一个程序,要求用户输入两个整数,然后计算并输出他们的和、差、积、商。
- 黑马程序员 测试题:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天
- 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。
- 从键盘输入一个日期,格式为yyyy-M-d 要求计算该日期与1949年10月1日距离多少天
- 【c++程序】任意给两个日期,计算相差多少天和各自星期几
- 如何用java计算两个日期之间间隔多少天
- 输入一个日期,判断这个日期在一年中是哪一天,是星期几,计算两个日期间的天数,使用字符串输出日期
- 编写一个程序,用户输入两个数,求其加减乘除,并用消息框显示计算结果。
- 编写一个程序来计算这两个序列不断变化的总和,直到达到某个次数。让用户交互地输入这个次数。
- 黑马程序员—编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期, *程序计算这一天是星期几,并且计算出是一年中的第几天。 */
- iOS 计算两个日期之前相隔多少晚
- 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天
- java--封装一类Java对象,用户从输入对话框输入两个日期,程序将判断两个日期的大小关系(比如输出:您输入的第二个日期大于第一个日期)以及两个日期之间的间隔天数(比如输出:2006年6月6日和
- 计算出两个日期相隔多少天
- 输入日期,计算出与当前系统日期相隔多少天(获取系统时间,年月日分别获取,对其进行格式化simpledateformat;输入的日期类似操作)
- 问题:设计一个大学教师和学生管理程序, 教师包括 编号、姓名、职称和教研室 数据的输入输出; 大学生包括编号、姓名、性别、班号、英语、高等数学和数据结构三门课程成绩的输入输出和计算平均分; 研究生包
- 用c++实现输入任意两个日期 计算相隔天数