#include<stdio.h>
int jisuan(int n, int y, int r) {
int yue = 4, ri = 1, sum = 0, i = 0, er = 0; //生日
int gy[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (n % 4 == 0) gy[2] = 29;
if (y == yue && ri > r) {
sum = sum + ri - r; //顺同月剩余天数
if (y == 2) er = 1;
}
if (y == yue && r > ri) {
sum = sum + r - ri; //逆同月剩余天数
i = 1;
if (y == 2) er = 1;
}
if (y < yue) {
sum = sum + gy[y] - r + ri; //顺两月剩余天数
y++;
if (y == 2) er = 1;
}
if (yue < y) {
sum = (sum + gy[yue] - ri + r);//逆两月剩余天数
if (yue == 2) er = 1;
yue++;
i = 1; //备注是需要跨年计算
}
while (y < yue) {//顺叠加
sum = sum + gy[y];
if (y == 2) er = 1;
y++;
}
while (yue < y) {//逆叠加
sum = sum + gy[yue];
if (yue == 2) er = 1;
yue++;
}
if (i == 1) sum = 365 - sum;//跨年逆差
if (n % 4 == 0 && er == 1 && i == 1) sum = sum - 1;
if (n + 1 % 4 == 0 && i == 1 && er == 1) sum = sum + 1; //跨年是闰年时
printf("\t%d天", sum);
return 0;
}
int main() {
jisuan(2000, 1, 29); //日期
return 0;
}
C语言计算距离生日天数
于 2022-03-26 00:36:25 首次发布