首页 > 试题广场 >

日期累加

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

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


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

输入

1
2008 2 3 100

输出

2008-05-13
from datetime import datetime, timedelta,date
m = int(input())
while True:
    try:
            
        if m == 0:
            break
        m -= 1
        y, m, d, ds = list(map(int, input().split()))

        dt = datetime(y, m, d)
        now = dt + timedelta(days=ds)
        print(now.strftime('%Y-%m-%d'))
    except:
        break

发表于 2025-03-16 00:04:15 回复(0)
先把前面转成多少天,加起来后在转化成日期就可以了
a=int(input())
ls=[[" "]*4 for i in range(a)]
for i in range(a):
    b=input().split()
    b=[int(x) for x in b]
    ls[i][0]=b[0]
    ls[i][1]=b[1]
    ls[i][2]=b[2]
    ls[i][3]=b[3]
for i in range(a):
    a1=0
    a2=0
    lst=[31,28,31,30,31,30,31,31,30,31,30,31]
    if ls[i][0]%4==0 and ls[i][0]%400!=0:
        lst[1]=29
    elif ls[i][0]%400==0:
        lst[1]=29
    for j in range(ls[i][1]-1):
        a1+=lst[j]
    a1+=ls[i][2]
    a1+=ls[i][3]
    op1=1
    j=0
    while True:
        if a1<=lst[j]:
            break
        else:
            op1+=1
            a1-=lst[j]
            if op1>12:
                op1=1
                ls[i][0]+=1
                j=0
            else:
                j+=1
        if ls[i][0]%4==0 and ls[i][0]%400!=0:
            lst[1]=29
        elif ls[i][0]%400==0:
            lst[1]=29
        else:
            lst[1]=28
        ls[i][1]=op1
        ls[i][2]=a1
for i in range(a):
    print("{}-{:02d}-{:02d}".format(ls[i][0],ls[i][1],ls[i][2]))

发表于 2024-02-16 17:09:03 回复(0)

问题信息

上传者:小小
难度:
2条回答 8536浏览

热门推荐

通过挑战的用户

查看代码
日期累加