给出年分m和一年中的第n天,算出第n天是几月几号。看看我的代码哪里有问题#include <iostream> using namespace std; bool isLeep(int year){ return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)); } /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int thedaysofmonth[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 main(int argc, char** argv) { int year,month=1,day=0,daysadd; while(true){ cin>>year>>daysadd; for(int i=1;i<=daysadd;i++){ day++; if(day==thedaysofmonth[month][isLeep(year)]){ month++; day=0; } if(month>=13){ year++; month=1; } // day++; } // cout<<year<<month<<day; printf("%04d-%02d-%02d\n",year,month,day); } return 0; }
时间: 2024-04-12 14:32:20 浏览: 48
你的代码中有一个问题是,你在计算日期时没有考虑到每个月的天数可能不同。你需要根据每个月的天数来判断是否需要增加月份和年份。
我修改了你的代码,添加了一个函数来计算给定年份和天数后的日期。请参考下面的代码:
```cpp
#include <iostream>
using namespace std;
bool isLeap(int year) {
return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
}
void calculateDate(int year, int daysadd) {
int daysInMonth[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 month = 1;
int day = 1;
while (daysadd > daysInMonth[month][isLeap(year)]) {
daysadd -= daysInMonth[month][isLeap(year)];
month++;
}
day += daysadd;
printf("%04d-%02d-%02d\n", year, month, day);
}
int main() {
int year, daysadd;
while (true) {
cin >> year >> daysadd;
calculateDate(year, daysadd);
}
return 0;
}
```
在这个修改后的代码中,我添加了一个名为 `calculateDate` 的函数,用于计算给定年份和天数后的日期。在这个函数中,我们使用了一个二维数组 `daysInMonth` 来存储每个月的天数。然后,我们根据给定的天数,逐渐减去当前月份的天数,直到剩余的天数小于当前月份的天数。最后,我们将剩余的天数作为日期的天数。
请注意,我还修改了 `main` 函数,将其定义为 `int main()`,并且删除了 `argc` 和 `argv` 参数。这是因为你在代码中没有使用这些参数,并且标准的 `main` 函数应该返回一个整数值。
阅读全文