这个算法是把出生当作第一天,不算今天。
#include<iostream>
#include<time.h>
#include<windows.h>
using namespace std;
bool leapyear(int y){
if(y%400==0||(y%100!=0&&y%4==0))
return 1;
else
return 0;
}
void getSystemTime(int &yn,int &mn,int &dn)
{
time_t timer;
time(&timer);
tm* t_tm = localtime(&timer);
yn=t_tm->tm_year+1900;
mn=t_tm->tm_mon+1;
dn=t_tm->tm_mday;
cout<<"今天是 "<<yn<<"年"<<mn<<"月"<<dn<<"日"<<endl;
}
int Days(int y,int m,int d ){
//计算该年月日是该年的第几天
int cont=0;
for(int i=1;i<m;i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
cont+=31;break;
case 2:
cont+=28;break;
default:
cont+=30;
}
}
if(leapyear(y)&&m>2)
cont+=1;
cont+=d;
return cont;
}
int main(){
int y,m,d;
int yn,mn,dn;
int sum=0;
cout<<"请输入年月日(例如:1990 01 01):"<<endl;
cin>>y>>m>>d;
getSystemTime(yn,mn,dn);
if(yn==y){
cout<<"error!"<<endl;
cout<<"本软件仅能提供 "<<yn<<"年之前的计算!"<<endl;
exit(0);
}
//计算第一年的全部天数和中间的几年
for(int i=y;i<yn;i++)
{
if(leapyear(i)) sum+=366;
else sum+=365;
}
//删除第一年算多了的
sum=sum-Days(y,m,d);
//计算今年的
sum+=Days(yn,mn,dn);
//输出
cout<<"今天是你人生的第 "<<sum<<" 天!"<<endl;
cout<<"距离你人生的10000天还有 "<<10000-sum<<" 天"<<endl;
system("pause");
return 0;
}