悠玄烛远 2020-04-12 11:52 采纳率: 0%
浏览 415
已采纳

算任意两个日期之间的天数,总是差那么十几天,这是为什么呢,排查了很久也没查出来

#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;
  • 写回答

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;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题