哪儿错了?一个整数星期 星期用1 2 3 4 5 6 7表示

编一程序实现: 由输入1980年以后的任意一个日期后,计算机能打印出该日期是星期几. 日期肯定合法,绝不会出现类似-23年13月52日的情况 已知1980年1月1日是星期二。
输入
年 月 日 日期有3个整数组成,中间用空格隔开
输出
一个整数星期 星期用1 2 3 4 5 6 7表示 (若是星期日就输出7)



#include <bits/stdc++.h>
using namespace std;
int y,m,d,sum;
int main() 
{
    scanf("%d %d %d",&y,&m,&d);
    for(int i=1980;i<y;i++)
    y%400==0||y%4==0 && y%100!=0?sum+=366:sum+=365;
    for(int i=1;i<m;i++){
        if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10)
        sum+=31;
        else if(i==4 || i==6 || i==9 || i==11)
        sum+=30;
        else if(i==2)
        y%400==0||y%4==0 && y%100!=0?sum+=29:sum+=28;
    }
    sum+=d;
    printf("%d",sum%7+1);
    return 0; 
}

【以下回答由 GPT 生成】

问题的具体解法如下所示:

首先,我们可以通过将输入和输出部分添加到代码中来实现所需的功能。以下是代码的修改版本:

#include <iostream>
#include <string>
using namespace std;

// 计算给定日期是当年的第几天
int calculateDayOfYear(int y, int m, int d) {
    int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int sum = d;

    // 处理闰年的情况
    if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {
        days[1] = 29;
    }

    for (int i = 0; i < m - 1; i++) {
        sum += days[i];
    }

    return sum;
}

int main() {
    string date;
    cin >> date;

    int y, m, d;
    sscanf(date.c_str(), "%d-%d-%d", &y, &m, &d);

    int dayOfYear = calculateDayOfYear(y, m, d);
    cout << dayOfYear;

    return 0;
}

上述代码中,我们定义了一个calculateDayOfYear函数,该函数用于计算给定日期是当年的第几天。首先,我们创建了一个数组days[],用于存储每个月的天数。然后,我们根据闰年的情况更新了2月的天数。接下来,我们使用一个循环来累加每个月的天数,最后将日期加入到总天数中,并返回计算结果。

main函数中,我们首先读取输入的日期字符串,并使用sscanf函数将其解析为年、月和日的整数。然后,我们调用calculateDayOfYear函数计算当年的第几天,并将结果输出。

通过上面的优化,我们改进了输入和输出部分,并且在计算每个月的天数时使用了函数,这样可以使代码更加清晰易懂,并且提高了代码的可读性和可维护性。

附注:在预定义的函数和库函数中,这里没有使用到,因为代码已经包含了所需的逻辑。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^