yuAriellexi 2018-09-22 14:32 采纳率: 100%
浏览 535
已采纳

[日期处理] 输入与输出问题,无解

题目描述:

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

输入:

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出:

每组数据输出一行,即日期差值

样例输入:

20130101
20130105

样例输出:

5


本文来自 xsj_blog 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xsj_blog/article/details/51988328?utm_source=copy

 #include <iostream>
#include <string>
#include <cmath>
using std::cin;
using std::cout;
using std::endl;
using std::string;

int month[13][2] = {{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {31, 31}};

bool comp(int y1, int m1, int d1, int y2, int m2, int d2)
{
    if (y1 != y2)
    {
        return y1 > y2;
    }
    else if (y1 == y2 && m1 != m2)
    {
        return m1 > m2;
    }
    else if (y1 == y2 && m1 == m2 && d1 != d2)
    {
        return d1 > d2;
    }
}

int ryear(int year)
{
    if ( (year % 4 == 0 && year % 100 == 0) || year % 400 == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main()
{
    string s1, s2;
    cin >> s1 >> s2;

    int y1, m1, d1, y2, m2, d2;
    y1 = (s1[0] - '0') * 1000 + (s1[1] - '0') * 100 + (s1[2] - '0') * 10 + (s1[3] - '0');   
    m1 = (s1[4] - '0') * 10 + (s1[5] - '0');
    d1 = (s1[6] - '0') * 10 + s1[7] - '0';

    y2 = (s2[0] - '0') * 1000 + (s2[1] - '0') * 100 + (s2[2] - '0') * 10 + (s2[3] - '0');   
    m2 = (s2[4] - '0') * 10 + (s2[5] - '0');
    d2 = (s2[6] - '0') * 10 + (s2[7] - '0');

    bool ifcomp = false; //if y1 > y2
    ifcomp = comp(y1, m1, d1, y2, m2, d2);
    int tempy = 0;
    int tempm = 0;
    int tempd = 0;
    if (ifcomp)
    {
        tempy = y1;
        y1 = y2;
        y2 = tempy;
        tempm = m1;
        m1 = m2;
        m2 = tempm;
        y2 = tempy;
        tempd = d1;
        d1 = d2;
        d2 = tempd;
    }//y1, m1, d1 < y2, m2, d2

    int ty, tm, td = 0;
    int ry = 0;
    int total = 1;

    while (y1 < y2 || m1 < m2 || d1 < d2)
    {
        d1++;
        if (d1 == month[m1][ryear(y1)] + 1)
        {
            m1++;
            d1 = 1;
        }

        if (m1 == 13)
        {
            y1++;
            m1 = 1;
        }
        total++;
    }
    cout << total;
}

又遇到了输入输出问题,这道题只有当我输入20130101 20130105才有输出结果,输入其他,都没有输出结果。

  • 写回答

3条回答 默认 最新

  • threenewbee 2018-09-22 14:49
    关注

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建