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

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

#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条)

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助