首页 > 试题广场 >

日期累加

[编程题]日期累加
  • 热度指数:44652 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
设计一个程序能计算一个日期加上若干天后是什么日期。

输入描述:
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。


输出描述:
输出m行,每行按yyyy-mm-dd的个数输出。
示例1

输入

1
2008 2 3 100

输出

2008-05-13
正反两过程的综合,先将日期转换为天数,累加后再转换为日期😄
#include<iostream>
#include<cstdio>
using namespace std;
//数据预处理
int daytab[2][13] = {
    {0,31,28,31,30,31,30,31,31,30,31,30,31},
    {0,31,29,31,30,31,30,31,31,30,31,30,31}
};
//判断平年还是闰年
bool IsLeapYear(int year){
    return (year%4==0 && year%100!=0)||(year%400==0);
}
//平年闰年天数
int NumberOfYear(int year){
    if(IsLeapYear(year)){
        return 366;
    }
    else{
        return 365;
    }
}
//主函数
int main(){
    
    int year,month,day;
    int number;
    int caseNumber;
    cin>>caseNumber;
    while(caseNumber--){
        cin>>year>>month>>day>>number;
        for(int i=0; i<month; i++){
            number += daytab[IsLeapYear(year)][i];
        }
        number += day;//至此将加上若干天后的日期转换为数字,接下来再换回日期reverse!
        month = 0;
        while(number>NumberOfYear(year)){
            number -= NumberOfYear(year);
            year += 1;
        }//对年份的处理
        while(number>daytab[IsLeapYear(year)][month]){
            number -= daytab[IsLeapYear(year)][month];
            month += 1;
        }//对月份的处理
        day = number;//最后对日期的处理
        printf("%04d-%02d-%02d\n",year,month,day);
    }
    return 0;
    
}

发表于 2020-02-11 11:19:23 回复(1)
import datetime

m = input()
time_set = []
for i in range(int(m)):
    temp = input().split()
    time_set.append(temp)

for temp_time in time_set:
    time1 = datetime.date(int(temp_time[0]), int(temp_time[1]), int(temp_time[2]))
    time2 = time1 + datetime.timedelta(days = int(temp_time[3]))
    print(time2)

发表于 2019-03-17 15:36:46 回复(0)
#include<stdio.h>
int main()
{
    int n,y,m,d,w,key;
    int a[2][13]={
     {0,31,28,31,30,31,30,31,31,30,31,30,31},
    {0,31,29,31,30,31,30,31,31,30,31,30,31}
    };
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d%d%d%d",&y,&m,&d,&w);
        key=0;
        if(y%4==0&&y%100!=0||y%400==0) key=1;
        d=d+w;//直接把日加上能加的天数
        while(d>a[key][m])//不是这个月
        {
            d=d-a[key][m];//减去天数
            m++;//月份加1
            if(m>12){//年份加一
                m=1;
                y++;
                key=0;//重新判断闰年
                if(y%4==0&&y%100!=0||y%400==0) key=1;
            }
        }
        printf("%d-%02d-%02d\n",y,m,d);
    }
}

发表于 2020-05-10 13:57:34 回复(0)
#include <cstdio>
using namespace std;
struct Date{
    int y;
    int m;
    int d;
};
int no_month_days[12]{31,28,31,30,31,30,31,31,30,31,30,31};
int leap_month_days[12]{31,29,31,30,31,30,31,31,30,31,30,31};
bool IsLeapYear(int y){
    return y%4==0&&y%100!=0||y%400==0;
}
Date operator+(Date date,int add_days){
    date.d+=add_days;
    while(1){
        int *month_days;
        month_days=IsLeapYear(date.y)?leap_month_days:no_month_days;
        if(date.d<=month_days[date.m-1])
            break;
        else{
            date.d-=month_days[date.m-1];date.m++;
            if(date.m>12){
                date.y++;date.m=1;
            }
        }
    }
    return date;
}
int main(){
    int n,y,m,d,add_days;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d%d%d%d",&y,&m,&d,&add_days);
        Date res=Date{y,m,d}+add_days;
        printf("%04d-%02d-%02d\n",res.y,res.m,res.d);
    }
    return 0;
}

发表于 2020-04-19 02:20:46 回复(0)
Java
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            int year = scanner.nextInt();
            int month = scanner.nextInt();
            int day = scanner.nextInt();
            int num = scanner.nextInt();
            LocalDate date = LocalDate.of(year, month, day);
            LocalDate date1 = date.plus(num, ChronoUnit.DAYS);
            DecimalFormat f = new DecimalFormat("00");
            System.out.println(date1.getYear()+"-"+f.format(date1.getMonth().getValue())+"-"+f.format(date1.getDayOfMonth()));
        }

    }
}


发表于 2020-03-19 22:57:42 回复(0)
#include<iostream>

using namespace std;

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},{30,30},{31,31}};

int isleap(int y)
{
	if((y%4==0&&y%100!=0)||(y%400==0))	return 1;		//是闰年 
	else	return 0;
}

int main()
{
	int m;
	cin>>m;
	for(int i=0;i<m;i++)
	{
		int y,m,d,n;
		cin>>y>>m>>d>>n;
		for(int j=0;j<n;j++)
		{
			int flag=isleap(y);
			d++;
			if(d>month[m][flag])
			{
				d=1;
				m++;
				if(m>12)
				{
					m=1;
					y++;
				}
			}
		}
		printf("%04d-%02d-%02d\n",y,m,d);
	}
	return 0;
}
很好理解的一种
发表于 2020-02-13 23:28:49 回复(0)
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Calendar calendar =Calendar.getInstance();
        int m,year,month,day,days;
        Scanner sc=new Scanner(System.in);
        m=sc.nextInt();
        String []dat =new String[m];
        for(int i=0;i<m;i++) {
            year=sc.nextInt();
            month=sc.nextInt();
            day=sc.nextInt();
            days=sc.nextInt();
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month-1);
            calendar.set(Calendar.DAY_OF_MONTH, day);
            calendar.add(Calendar.DAY_OF_MONTH, days);
            Date data=calendar.getTime();
            DateFormat d=new SimpleDateFormat("yyyy-MM-dd");
            String n=d.format(data);
            dat [i]=n;
        }
        for(String n:dat ) {
            System.out.println(n);
        }    
    }
}
发表于 2019-04-10 23:13:38 回复(1)
import java.util.Scanner;
public class Main
{
    public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    int cnt=input.nextInt();
    int[] date=new int[4];
    int[] date1={31,29,31,30,31,30,31,31,30,31,30,31};//闰年
    int[] date2={31,28,31,30,31,30,31,31,30,31,30,31};
    int[] date3=new int[3];
   for(int j=0;j<cnt;j++)
    {for(int i=0;i<4;i++)  
    date[i]=input.nextInt();

        int sumday=sumday(date,date1,date2);
        int count=sumday/366;
        
        if(count<1)
            countdate(sumday,date,date1,date2,date3);
        else
            {for(int i=0;i<count;i++)
              {
                if(isyears(date[0]+i))
                    sumday-=366;
                else
                    sumday-=365;
              }
            date[0]=date[0]+count;
            countdate(sumday,date,date1,date2,date3);
            }
    System.out.printf("%d-%02d-%02d\n", date3[0],date3[1],date3[2]);
    }
    input.close();
    }     
    public static boolean isyears(int year)
    {
        if(year%4==0&&year%100!=0||year%400==0)
        return true;
        return false;
    }
    public static int sumday(int[] date,int[] date1,int[] date2)
    {
        int sumdays=0;
        if(isyears(date[0])) 
        {
            for(int i=0;i<date[1]-1;i++)
            {
                sumdays+=date1[i];
            }
                sumdays=sumdays+date[2]+date[3];
        }
        else {
            for(int i=0;i<date[1]-1;i++)
            {
                sumdays+=date2[i];
            }
            sumdays=sumdays+date[2]+date[3];
        }
        return sumdays;
    }
    public static void countdate(int days,int[] date,int[] date1,int[] date2,int[] date3)
    {
           if(isyears(date[0]))
             { 
                 
                     int j=0;
                     while(days-date1[j]>0)
                     {days-=date1[j];
                     j++;
                     }
                     date3[0]=date[0];
                     date3[1]=j+1;
                     date3[2]=days;
                }
           else
           {

               int j=0;
               while(days-date2[j]>0)
               {days-=date2[j];
               j++;
               }
               date3[0]=date[0];
               date3[1]=j+1;
               date3[2]=days;
           }
    }
    
}
发表于 2019-03-25 13:19:19 回复(0)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <cmath>
#include <set>
#include <queue>
  
using namespace std;
bool pd(int y)
{
    if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
    return true;
    return false;
}
int months[] ={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    int n;
    int nowYear,nowMonth,nowDay;
    int add;
    cin >> n;
    for(int i = 0 ; i<n;i++)
    {
        cin >> nowYear >> nowMonth >> nowDay >> add;
        
        while(add)
        {
            if(pd(nowYear))
            months[2] = 29;
            else
            months[2] = 28;
            
            if(add >= months[nowMonth] - nowDay + 1)
            {
                add = add - (months[nowMonth] - nowDay + 1);
                nowDay = 1;
                nowMonth++;
                if(nowMonth > 12)
                {
                    nowMonth = 1;
                    nowYear++;
                }
            }
            else
            {
                nowDay += add;
                add = 0;
            }
        }
        printf("%04d-%02d-%02d\n",nowYear,nowMonth,nowDay);
    }
}

发表于 2019-03-04 21:18:50 回复(0)
#include <stdio.h>
#define ISYEAP(x) x%4==0&&x%100!=0||x%400==0?1:0
int main()
{
    int n,y,m,d,x;
    int a[13][2]=
    {
        0,0,
        31,31,
        28,29,
        31,31,
        30,30,
        31,31,
        30,30,
        31,31,
        31,31,
        30,30,
        31,31,
        30,30,
        31,31
    };
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d%d%d%d",&y,&m,&d,&x);
        for(int i=0;i<x;i++)
        {
            d++;
            if(d>a[m][ISYEAP(y)])
            {
                d=1;
                m++;
                if(m>12)
                {
                    m=1;
                    y++;
                }
            }
        }
        printf("%04d-%02d-%02d\n",y,m,d);
    }
    return 0;
}
代码不短,但是很好理解的
发表于 2019-03-15 20:21:23 回复(4)
幼儿园代码水平献丑了
#include<iostream>
#include<cstring>
using namespace std;
bool leapyear(int y) {
	if (y % 100 == 0 && y % 400 == 0 || y % 100 != 0 && y % 4 == 0)
		return  true;
	else return false;
}
int fun(int y, int m, int d, int n) {
	int sum = 0;
	int mon = 0, date = 0;
	int month[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	if (leapyear(y)) {
		month[2] = 29;
	}
	for (int i = 0; i < m; i++) {
		sum += month[i];
	}
	sum = sum + d + n;
	while (sum >= 365) {
		if (leapyear(y) && (sum / 366 != 0)) {
			y++;
			sum -= 366;
		}
		if ((!leapyear(y)) && (sum / 365 != 0)) {
			y++;
			sum -= 365;
		}
	}
	if (leapyear(y)) {
		month[2] = 29;
	}
	if (!leapyear(y)) {
		month[2] = 28;
	}
	if (sum == 0) {
		y--;
		mon = 12;
		date = 31;
		printf("%04d-%02d-%02d\n", y, mon, date);
	}
	if (sum != 0) {
		int temp = 0;
		for (int i = 1; i <= 12; i++) {
			temp += month[i];
			mon++;
			if (temp >= sum) {
				temp -= month[i];
				date = sum - temp;
				break;
			}
		}
		printf("%04d-%02d-%02d\n", y, mon, date);
	}
	return 0;
}
int main() {
	int m, year, mon, date, n;
	while (cin >> m) {
		for (int i = 0; i < m; i++) {
			cin >> year >> mon >> date >> n;
			fun(year, mon, date, n);
		}
	}
	return 0;
}

发表于 2020-02-16 20:40:07 回复(0)
#include <iostream>
#include <cstdio>
using namespace std;

int daytab[2][13]{//使用二维数组预先记录平年闰年天数
    {0,31,28,31,30,31,30,31,31,30,31,30,31},
    {0,31,29,31,30,31,30,31,31,30,31,30,31}
};
bool isleapyear(int year){//isleapyear()用于判断是否是闰年
    return (((year%4==0)&&(year%100!=0))||(year%400==0));
}
int main()
{
    int m,year,month,day,add;
    scanf("%d", &m);
    for(int i=0; i<m; i++){//读入的第一个数确定测试用例的个数
        scanf("%d%d%d%d", &year, &month, &day, &add);
        int days = day + add;//除去整年整月余下的天数
        int row;
        row = isleapyear(year);
        while(days>daytab[row][month]){//从所给月份开始计数
            days -= daytab[row][month++];//若余下天数大于该月的总天数,则余下天数减去该月的天数,并且月份加1
            if(month==13){//当月份大于12时,年数加1,月份归一
                year++;
                row = isleapyear(year);//!!!年份加1,可能发生平年闰年的变化
                month = 1;
            }
        }
        printf("%04d-%02d-%02d\n", year, month, days);
    }
    return 0;
}


发表于 2021-01-09 22:40:32 回复(0)
#include <climits>
#include <iostream>
using namespace std;
class Date
{
public:
        //重写构造函数,用于cin输入的year、month、day对Date对象初始化
    Date(int year=0,int month =0,int day=0)
        :_year(year),
        _month(month),
        _day(day)
    {

    }
        //打印输出,用于题目符合格式的输出
    void Print()
    {
        printf("%04d-%02d-%02d\n",_year,_month,_day);
        //cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
    }
        //获取当前年月,具体有多少天,方便日期+后进位
    int GetMonthDays(int year,int month)
    {
        int monthDays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int retDays = monthDays[month];
        if((year%4==0&&year%100!=0||year%400==0)&&month==2)
        {
            ++retDays;
        }
        return retDays;
    }
        //运算符重载,用于Date对象进行日期+=
    Date& operator+=(int x)
    {
        _day+=x;
        while(_day>GetMonthDays(_year,_month))
        {
            _day-=GetMonthDays(_year,_month);
            ++_month;
            if(_month>12)
            {
                _month = 1;
                ++_year;
            }
        }

        return *this;
    }
private:
    int _year;
    int _month;
    int _day;
};

int main() {
    int m;
    cin>>m;
    int icount = m;
    Date d[m];
        //按题目意思,先进行m组的输入,每输入一组,对一个Date对象进行初始化并进行+=
    while(icount)
    {
        int year=0,month=0,day=0,adddays=0;
        cin>>year>>month>>day>>adddays;
        d[icount] = Date(year,month,day);
        d[icount]+=adddays;
        icount--;
    }
        //将m组Date对象进行打印输出
    for(int i=m;i>0;--i)
    {
        d[i].Print();
    }
}


发表于 2024-02-05 16:59:05 回复(0)
#include<stdio.h>
#include<stdbool.h>
#include<string.h>
#include<math.h>/*输入第一行表示样例个数接下来的m行中,每行4个整数,分别表示年、月、日和累加的天数。
输出:
输出m行,每行按yyyy-mm-dd的个数输出。
样例输入:
1
2008 2 3 100
样例输出:
2008-05-13*/

int IsRUN(int y){
    if((y%4==0&&y%100!=0)||(y%400==0))
        return 1;
    else
        return 0;
}
int a[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
    {0,31,29,31,30,31,30,31,31,30,31,30,31}};


int nian(int y){
    if(IsRUN(y)==1)
        return 366;
    else
        return 365;

}
int main(){
    int m,i,y,n,d,sum=0,s,m1;
    scanf("%d",&n);
    while(n--){
    scanf("%d%d%d%d",&y,&m,&d,&s);
    int row=IsRUN(y);
    for(i=0;i<m;i++){
        sum+=a[row][i];
    }
    sum=sum+d+s;
    while(sum>nian(y)){
        sum-=nian(y);
        y++;}
        m1=0;
       row=IsRUN(y);
    for(i=0;a[row][i]<sum;i++){
        m1++;
        sum-=a[row][i];
    }
  printf("%04d-%02d-%02d\n",y,m1,sum);

}
return 0;}


为什么不对折腾死我了

发表于 2024-03-24 11:55:12 回复(0)
#include <iostream>

using namespace std;

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

int isleapyear(int x) {
    if (x % 400 == 0 || (x % 100 != 0 && x % 4 == 0))
        return 1;
    else
        return 0;
}
int main() {
    int n;
    cin >> n;
    for (int p = 0; p < n; ++p) {
        int yy = 0, mm = 0, dd = 0, plus_day = 0;

        scanf("%d %d %d %d", &yy, &mm, &dd, &plus_day);

        int leapyear = isleapyear(yy);
        int sum_day = plus_day + dd;
        for (int j = mm - 1 ; j > 0 ; j--) {
            sum_day += daytab[leapyear][j];
        }
        for (; sum_day >= 365 + isleapyear(yy) ; yy++) {
            sum_day = sum_day - 365 - isleapyear(yy);
        }

        leapyear = isleapyear(yy);
        for (int i = 1; i <= 12; ++i) {
            if (daytab[leapyear][i] < sum_day) {
                sum_day -= daytab[leapyear][i];

            } else {
                printf("%04d-%02d-%02d\n", yy, i, sum_day);
                break;
            }
        }
    }
    return 0;
}

发表于 2024-03-22 17:57:33 回复(0)
#include <iostream>
using namespace std;

bool IsLeap(int y) {
    return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
}

int main() {
    int y,m,d,n;
    int l;
    cin>>l;
    int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    while (cin >>y>>m>>d>>n) { // 注意 while 处理多个 case
        int sum = 0;
        n+=d;
        for (int i = m; i < 13; i++) {
            if (IsLeap(y)) month[2] = 29;
            else month[2] = 28;
            sum += month[i];
            if (sum >= n) {
                int d = month[i] - (sum - n);
                printf("%4d-%02d-%02d\n", y, i, d);
                break;
            }
            if(i==12){
                y++;
                i=0;
            }
        }
    }
}
// 64 位输出请用 printf("%lld")
发表于 2024-03-14 11:52:57 回复(0)
我感觉比较简洁好懂
#include <bits/stdc++.h>
using namespace std;
int daytable[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}} ;
bool isleap(int year) {
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return true;
    else return false;
}
int main() { //1967 8 17 294
    int m;
    cin >> m;
    int year, month, day, temp;
    for (int i = 0; i < m; i++) {
        cin >> year >> month >> day >> temp;
        day = day + temp; //311
        while (day > daytable[isleap(year)][month - 1]) {
            day -= daytable[isleap(year)][month - 1]; //280,250,219,189,158,127,
            if (month == 12) {
                month = 1;    //1968,1
                year++;
            } else month++; //9,10,11,12,2
        }
        printf("%04d-%02d-%02d\n", year, month, day);
    }
}




发表于 2024-03-09 22:26:46 回复(0)
#include<cstdio>

int main() {
    int mday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int m;
    scanf("%d",&m);
    for (int i = 0; i <m ; ++i) {
        int curyear,curmonth,curday,total;
        int next=0; //已经走了多少天
        scanf("%d%d%d%d",&curyear,&curmonth,&curday,&total);
        while (next<total){
            bool isLeap=curyear%400==0||curyear%100!=0&&curyear%4==0;
            if(isLeap){
                mday[2]={29};
            } else{
                mday[2]={28};
            }
            curday++;
            if(curday>mday[curmonth]){
                curmonth++;
                curday=1;
                if(curmonth>12){
                    curyear++;
                    curmonth=1;
                }
            }
            next++;
        }
        printf("%04d-%02d-%02d\n",curyear,curmonth,curday);
    }

}

发表于 2024-03-07 21:51:32 回复(0)
//好处:不用函数重载,定义一个类,2个方法搞定,main中有2中方式,一种是全部读取了再输出,一种是读取一行输出一行,
#include <iostream>
using namespace std;
class Date {
  public:
    Date(int year, int month, int day) {
        _year = year;
        _month = month;
        _day = day;
    };
    int getMonthDay(int year, int month)const {
        if (month > 12) {
            return 1;
        }
        int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        if (month == 2 &&
                ((year % 4 == 0 && year % 100 != 0)
                 || year % 400 == 0)) {
            return 29;
        }
        return arr[month];
    }
   
    void getDate( int num)const {
        Date temp(_year, _month, 1);
        num = num + _day;
        while (num > 0 && num > getMonthDay(temp._year, temp._month)) {
            num = num - getMonthDay(temp._year, temp._month);
            ++temp._month;
            if (temp._month == 13) {
                temp._year++;
                temp._month = 1;
            }
        }
        temp._day = num;
        printf("%d-%02d-%02d\n", temp._year, temp._month, temp._day);
    }

  private:
    int _year;
    int _month;
    int _day;
};
//方式一
int main() {
    int lineNum;
    cin >> lineNum;
    int *arr=new int[lineNum*4];
    for (int i = 0; i < lineNum; i++) {
        int a, b, c, d;
        cin >> a >> b >> c >> d;
        arr[i * 4 ] = a;
        arr[i * 4 + 1] = b;
        arr[i * 4 + 2] = c;
        arr[i * 4 + 3] = d;
    }
for (int i = 0; i < lineNum; i++) {
        Date d1(arr[i * 4], arr[i * 4 + 1], arr[i * 4 + 2]);
        d1.getDate(arr[i * 4 + 3]);
    }

}
//方式二
//方式一,逐行读取并输出 2ms/308kb
int main() {
    int lineNum;
    cin >> lineNum;
    for (int i = 0; i < lineNum; i++) {
        int a, b, c, d;

        cin >> a >> b >> c >> d;
        Date d1(a, b, c);
        d1.getDate(d);
    }
    // 注意 while 处理多个 case
}

发表于 2024-03-05 17:03:59 回复(0)
#include <iostream>
using namespace std;
#define IsYep(x) ((x%100!=0)&&(x%4==0))||(x%400==0)?1:0
int dayOfMonth[13][2] = {
    0, 0,
    31, 31,
    28, 29,
    31, 31,
    30, 30,
    31, 31,
    30, 30,
    31, 31,
    31, 31,
    30, 30,
    31, 31,
    30, 30,
    31, 31
};

struct Date {
    int Year;
    int Month;
    int Day;
    void nextDay() {
        Day++;
        if (Day > dayOfMonth[Month][IsYep(Year)]) {
            Day = 1;
            Month++;
            if (Month > 12) {
                Month = 1;
                Year++;
            }
        }
    }
};

int main() {
    Date tmp;
    int year, month, day, number;
    int n;
    cin >> n;
    for (int j = 0; j < n; j++) {
        scanf("%d%d%d%d", &year, &month, &day, &number);
        tmp.Year = year;
        tmp.Month = month;
        tmp.Day = day;
        for (int i = 0; i < number; i++) {
            tmp.nextDay();
        }
        printf("%04d-%02d-%02d\n",tmp.Year,tmp.Month,tmp.Day);
        //cout << tmp.Year << "-" << tmp.Month << "-" << tmp.Day << endl;
    }
}
// 64 位输出请用 printf("%lld")
发表于 2024-02-29 16:06:02 回复(0)