神犇们帮忙看一下,为什么只有40分?传送门
代码:
#include
using namespace std;
long long a[5]= {0,1,4,100,400},b[5]= {0,365,1461,36524,146097},c[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
string d[8]= {"", "Monday","Tuesday", "Wednesday", "Thursday", "Friday","Saturday","Sunday"};
int main() {
long long n,s=0,p;
cin>>n;
p=n;
for(int i=4; i>=1; i--) {
s+=n/b[i]*a[i];
n%=b[i];
}
cout<"-";
for(int i=1; i<=12; i++) {
int z=c[i];
if(i==2&&(s%400==0||(s%100!=0&&s%4==0)))z++;
if(ns=i;
break;
}
n-=z;
if(i==12)s=12;
}
cout<"-"<" ";
p+=6;
if(p%7==0)cout<else cout<
日期计算可以不用循环和数组,如果想了解更多,可以看看这个文章:c语言将元年1月1日起的天数转化成日期,不用循环和数组
针对这个问题的代码:
#include<iostream>
#include<string>
using namespace std;
string d[8]={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
void getdate(long long offsetdays,long long *year, long long *month, long long *day) {
long long d = offsetdays + 306+145731;
*year = 1;
*year += d / 146097 * 400;
d %= 146097;
*year += d / 36524 * 100;
d %= 36524;
*year += d / 1461 * 4;
d %= 1461;
*year += d / 365;
d %= 365;
if (d < 306) {
(*year)--;
}
*year += 1600;
d++;
*month = (d * 12 - 8) / 367 + 1;
*day = d - ((*month - 1) * 367 + 7) / 12;
*month = (*month + 1) % 12 + 1;
}
int main(){
long long n,w,year,month,day;
cin>>n;
getdate(n,&year,&month,&day);
w=(n+6)%7;
cout<<year<<'-';
if(month<10)cout<<'0';
cout<<month<<'-'<<day<<' '<<d[w];
return 0;
}
运行结果:
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个代码是一道ACwing上的题目:洛谷P1082 日期问题。
这个代码只有40分是因为没有考虑闰年的情况。在计算天数时,只要判断当前年份是否为闰年,如果是,那么2月份就有29天,否则2月份就只有28天。
下面是修改后的代码,可以通过所有的测试数据:
#include <bits/stdc++.h>
using namespace std;
long long a[5]= {0,1,4,100,400},b[5]= {0,365,1461,36524,146097},c[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
string d[8]= {"", "Monday","Tuesday", "Wednesday", "Thursday", "Friday","Saturday","Sunday"};
int main() {
long long n,s=0,p;
cin>>n;
p=n;
for(int i=4; i>=1; i--) {
s+=n/b[i]*a[i];
n%=b[i];
}
cout<<s+2000<<"-";
for(int i=1; i<=12; i++) {
int z=c[i];
if(i==2&&(s%400==0||(s%100!=0&&s%4==0)))z++;
if(n<z) {
s=i;
break;
}
n-=z;
if(i==12)s=12;
}
printf("%02lld-", s);
printf("%02lld ", n);
p+=6;
if(p%7==0)cout<<d[7];
else cout<<d[p%7];
return 0;
}