关于c++的一个日常练习,可以说是大糊涂导致的了。原题是要求输入个人年龄,然后得出年龄包含月数,然后错误审题的我搞了个判断闰年,最后干脆直接另起一题:输入个人生日和所处年份,得出年龄和度过的天数以及月数。
思路如下:
判断所在年份是否是闰年,如果不是,就计算得出中间的四年一周期的周期数乘以四年的天数,再加上剩下的平年的天数即可;反之也一样思路,计算中间期,得出所占天数,计算剩余天数。
放代码:
//练习 -- 通过输入生日和现在日期判断活了多少天(细思极恐),多少个月,几岁了//
#include<iostream>
using namespace std;
int main() {
int reap(int);
int i; //定义一个存储判断所在年份是否是闰年的参数
int y, m, d; //对应生日的准确日期
int a, b, c; //对应现在的日期
int age, month, day; //对应输出的年月日
cout << "Please enter your birthday:";
cin >> y>>m>>d;
cout << "Please enter the particular date:";
cin >> a>>b>>c;
i = reap(a);
age=a-y; //对应年龄是现在的年份减去出生年份
month = (age - 1) * 12 + (12 - m + 1) + b; //对应度过的月数是年龄减1的值乘上12个月加上出生那年的月份和现在的月份
//度过的天数的计算办法,由于闰年平年的不同,先得出其中经过了多少个四年周期,然后是这个完整周期前面和后面对应的平年计算//
if (!i) {
switch (a % 4) {
case 1:day = ((age - 1) / 4) * 1461 + ((age - 1) % 4 + 1) * 365; break;
case 2:day = ((age - 2) / 4) * 1461 + ((age - 2) % 4 + 2) * 365; break;
case 3:day = ((age - 3) / 4) * 1461 + ((age - 3) % 4 + 3) * 365; break;
}
} //这个对应的是所在年份不是闰年的天数计算//
else
day = (age / 4) * 1461 + (age % 4) * 365;
cout << "Congratulation!You are " << age << " years old!" << endl;
cout << "And you've been passed "<<day<<" days and "<<month<<" months." << endl;
system("pause");
return 0;
}
//判断所在年份是否为闰年//
int reap(int year) {
bool answer;
if (year % 4 == 0) { //年份整除4
if (year % 100 == 0) { //年份整除100
if (year % 400 == 0) //年份整除400
answer = true; //能够被4、100、400整除的是闰年
else
answer = false; //反之非闰年
}
else
answer = true; //能够被4但不能被100整除的肯定是闰年
}
else
answer = false; //都不能被4整除了肯定不是闰年了
return answer;
}
这个是在vs2015上面运行得出的结果。