一、平年:365天,2月28天。
二、闰年:366天,2月29天。
求闰年函数:(闰年分为普通润年和世纪闰年,普通闰年年分是4倍数不是100倍数,世纪闰年是400的倍数)
bool run(int x) {
if((x % 4 == 0 && x % 100 != 0 )|| x % 400 == 0)
return true;
return false;
}
三、计算从公元1年开始开始,一直到今天的总天数
板子一:
#include<bits/stdc++.h>
using namespace std;
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//从d[1]开始存
bool run(int x) {
if((x % 4 == 0 && x % 100 != 0 )|| x % 400 == 0)
return true;
return false;
}
int day(int s) {
int x = s / 10000;//年
int y = s % 10000 / 100;//月
int z = s % 10000 % 100;//日
if(run(x)) d[2] = 29;
else d[2] = 28;
int ans = 0; //存储结果
while(x--) ans += (run(x) ? 366 : 365); //求年份总天数
while(y--) ans += d[y]; //求月份总天数
ans += z; //加上天数
return ans;
}
int main( ) {
int x;//x是0000/00/00这种形式,如20230101,2023.1.1
cin >> x;
cout << day(x);
return 0;
}
板子二:
#include<bits/stdc++.h>
using namespace std;
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//从d[1]开始存
bool run(int x) {
if((x % 4 == 0 && x % 100 != 0 )|| x % 400 == 0)
return true;
return false;
}
int day(int x,int y,int z) {
if(run(x)) d[2] = 29;
else d[2] = 28;
int ans = 0; //存储结果
while(x--) ans += (run(x) ? 366 : 365); //求年份总天数
while(y--) ans += d[y]; //求月份总天数
ans += z; //加上天数
return ans;
}
int main( ) {
int x,y,z;
cin >> x >> y >> z;
cout << day(x,y,z);
return 0;
}
四、日期回文数
思路:我们只要枚举日期的后四位,整个日期便可以推出来,比如后四位是 1201
那整个日期就应该是 1021+1201=10211201,然后判断此日期是否满足条件即。
#include <iostream>
using namespace std;
const int days[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
int l,r, ans = 0;
cin >> l >> r;
for (int i = 1; i <= 12; i ++) {
for (int j = 1; j <= days[i]; j ++) {
int c = i * 100 + j;
c = c % 10 * 10000000 + c / 10 % 10 * 1000000 + c / 100 % 10 * 100000 + c / 1000 * 10000 + c;
if (c >= l && c <= r) ans++;
}
}
cout << ans;
return 0;
}
五、枚举203.10.11-2024.01.01 的相关方法
#include<bits/stdc++.h>
using namespace std;
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//从d[1]开始存
bool run(int x) {
if((x % 4 == 0 && x % 100 != 0 )|| x % 400 == 0)
return true;
return false;
}
int main() {
int l,r;
cin >> l >> r;
for(int i = l/10000; i <= r/10000; i++) {
for(int j = 1; j <= 12; j++) {
if(j == 2 && run(i)) d[2] = 29;
else d[2] = 28;
for(int k = 1; k <= d[j]; k++){
int s = i *10000 + j * 100 + k;
cout << s << endl;
}
}
}
return 0;
}