/*
*Corpyright (c)2013,烟台大学计算机学院
*All right reseved.
*作者:z张梦佳
*完成日期:2014年2月28日
*版本号:v1.0
*输入描述:
*问题描述:依次输入您的年月日。输出相差几天!
*程序输出:
*问题分析:
*算法设计:
*/
#include <iostream>
using namespace std;
int num(int,int,int);
int num2(int,int,int,int,int,int);
struct Date
{
int year;
int month;
int day;
};
int main()
{
Date date,date1;
cout<<"input your year,month,day!"<<endl;
cin>>date.year>>date.month>>date.day;
cout<<"input his/her year,month,day!"<<endl;
cin>>date1.year>>date1.month>>date1.day;
int days=0,h;
for(h=num(date.year,date1.year,0);h<num(date.year,date1.year,1);h++)
{
if(date.year%4==0&&date.year%100!=0||date.year%400==0)
days=days+366;
else
days=days+365;
}
h=num2(date.year,date.month,date.day,date1.year,date1.month,date1.day);
cout<<"相差"<<days+h<<"天!"<<endl;
return 0;
}
int num(int a,int b,int c)
{
int num1,num2;
if(a>b)
{
num1=b;
num2=a;
}
else
{
num1=a;
num2=b;
}
if(c==0)
return num1;
else
return num2;
}
int num2(int a,int b,int c,int d,int e,int f)
{
int ap1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int ap[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int days=0,day2=0;
if(a%4==0&&a%100!=0||a%400==0)
ap1[2]=29;
for(int i=1;i<b;i++)
days=days+ap[i];
if(d%4==0&&d%100!=0||d%400==0)
ap[2]=29;
for(int i=1;i<e;i++)
day2=day2+ap[i];
if(a>d)
return days-day2;
else
return day2-days;
}
感悟
调了好久!感觉把问题搞麻烦了!