#include<stdio.h>
#include<string.h>
#include<iostream>
#include <math.h>
#define CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
using namespace std;
bool redundent(int leapyear)
{
return (leapyear % 4 == 0 && leapyear % 100 != 0 || leapyear % 400 == 0) ? true : false;
}
int option(int year,int month)
{
switch (month)
{
case 1: case 3: case 5: case 7: case 8:case 10:case 12:
return 31; break;
case 4:case 6:case 9:case 11:
return 30; break;
case 2: return 28+redundent(year); break;
}
}
int estimate(int year, int month,int day)//出生年月份剩余天数
{
int date = 0;
date = (month == 2) ? (3 - redundent(year)) : (month - 1) % 7 % 2;
date = 31 - day-date;
return date;
}
int main()//输入年月日,判断一个人岁数,精确到天
{
int year, month, day, birth, month1, born, present, amount ,YOB=0, nowadays=0 , sum = 0;
puts("依次输入出生年,出生月份,出生天数,现在年,现在月份,现在天数");
scanf("%d%d%d%d%d%d", &birth, &month1, &born, &year, &month, &day);
for (int i = birth; i <= year; i++)
redundent(i) ? sum++ : sum;
month >= 2 ? sum : sum--;
month1 <= 2 ? sum: sum--;//找闰年个数
present = (year - birth - 1) * 365 + sum;//出生年现在年以外天数
for (int i = month1; i < 12; i++)
{
if (month1 == 12) break;
YOB += option(birth,i);
}
YOB += estimate(birth, month1, born);//出生年天数
for (int i = 1; i < month; i++)
{
if (month == 1) break;
nowadays += option(year,i);
}
nowadays += day;//现在年天数
amount = present + day + YOB + nowadays;//总的天数
cout << amount << endl;
算任意两个日期之间的天数,总是差那么十几天,这是为什么呢,排查了很久也没查出来
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 智者知已应修善业 2020-04-12 12:04关注
粗略看 case 2: return 28+redundent(year); break;计算就不对返回的是bool 非数值,其余地方调用该函数也一样,写为1和0比较直接,总体看逻辑不很清晰。
比较直接的办法就是按月天数累计从出生年的月累计到计算月的前月+计算月的天数-出生月天数。
若按年计算也可以,不过也是要累计年的月天数,比如:2000年7月4号----2020年4月7号,那怎么计算?按年计算2020-2000*365+闰年数+月累计到4月7号-累计出生年的月到7月4号就按你的代码
int 闰年(int leapyear) { return (leapyear % 4 == 0 && leapyear % 100 != 0 || leapyear % 400 == 0) ? 1 : 0; } int 天数(int year, int month) { switch (month) { case 1: case 3: case 5: case 7: case 8:case 10:case 12: return 31; break; case 4:case 6:case 9:case 11: return 30; break; case 2: return 28 + 闰年(year); break; } }
cout << "第六步,求几个闰年:"; while (--qn > sn)lj += 闰年(qn); cout << ++lj;
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂