✨✨ 欢迎大家来到小伞的大讲堂✨✨
🎈🎈养成好习惯,先赞后看哦~🎈🎈
所属专栏:C++学习
小伞的主页:xiaosan_blog
1.计算日期到天数的转换(简单)
计算日期到天数转换__牛客网 (nowcoder.com)
这题主要考察对闰年平年的判断,大家肯定能轻松解决的!!!
#include <stdio.h>
int main() {
int y, m, d;
scanf("%d %d %d", &y, &m, &d);
//判断是否为闰年
int arr[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (((y % 4 == 0) && (y % 100 != 0)) || y % 400 == 0) {
arr[1] = 29;
}//求和
int sum = 0;
for (int i = 0; i < m - 1; i++) {
sum += arr[i];
}
sum += d;
printf("%d", sum);
return 0;
}
2.日期差值(简单)
本题我采用的是年月分别求和(y1为最大值),计算两个的年份的差值(单独计算),求和他们本年的天数,sum求和;
相信大家会有更方便的方法的!!!
#include <stdio.h>
void swap(int* x, int* y) {
int tmp = *x;
*x = *y;
*y = tmp;
}
int main() {
int y1, m1, d1, y2, m2, d2;
int arr[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
scanf("%4d%2d%2d", &y1, &m1, &d1);
scanf("%4d%2d%2d", &y2, &m2, &d2);
int sum2 = 0;
int sum1 = 0;
//因为后面我认为y1为大值,所以在这里判断将y1设置为大值
if (y1 < y2) {
swap(&y1, &y2);
swap(&m1, &m2);
swap(&d1, &d2);
}
if (y1 == y2) {
if (m1 < m2) {
swap(&m1, &m2);
swap(&d1, &d2);
}
}
if (y1 == y2) {
if (m1 == m2) {
if (d1 < d2) {
swap(&d1, &d2);
}
}
}
//差的年数
int x = y1 - y2;
//记录y2年的天数
if (((y2 % 4 == 0) && (y2 % 100 != 0)) || y2 % 400 == 0) {
//判断是否为闰年
arr[1] = 29;
}
for (int i = 0; i < m2 - 1; i++) {
sum2 += arr[i];
}
sum2 += d2;
//记录y1年的天数
if (((y1 % 4 == 0) && (y1 % 100 != 0)) || y1 % 400 == 0) {
//判断是否为闰年
arr[1] = 29;
}
for (int i = 0; i < m1 - 1; i++) {
sum1 += arr[i];
}
sum1 += d1;
for (int i = 0; i < x; i++) {
if (((y1 % 4 == 0) && (y1 % 100 != 0)) || y1 % 400 == 0) {
sum1 += 366;
} else {
sum1 += 365;
}
}
printf("%d", sum1 - sum2+1);
return 0;
}
3.日期累加
本题主要处理进位的问题,注意本题的打印格式
#include <iostream>
using namespace std;
static int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int main() {
int n;
scanf("%d", &n);
while (n--) {
int y, m, d, add;
//将年月日分别取值,以便后续分别处理
scanf("%4d%2d%2d", &y, &m, &d);
scanf("%d", &add);
d += add;//将日相加
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
arr[2] = 29;
}
//判断是否超过当月的天数
while (d > arr[m]) {
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
arr[2] = 29;
} else {
arr[2] = 28;
}
d -= arr[m];
m++;
while (m > 12) {
m -= 12;
y++;
}
}
//因为对打印的值有特殊要求,这里需要特殊处理
if (m > 9)
if (d > 9) {
printf("%d-%d-%d\n", y, m, d);
}
else {
printf("%d-%d-0%d\n", y, m, d);
}
else{
if (d > 9) {
printf("%d-0%d-%d\n", y, m, d);
}
else {
printf("%d-0%d-0%d\n", y, m, d);
}
}
}
}