codeup 日期处理
题号:10000578
A题:日期差值
题目链接:http://codeup.cn/problem.php?cid=100000578&pid=0
#include <cstdio>
int month[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}
};
bool isLeap(int year){
return (year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
int time1,y1,m1,d1;
int time2,y2,m2,d2;
while(scanf("%d%d",&time1,&time2)!=EOF){
if(time1>time2){ //第一个日期晚于第二个日期,则交换
int temp=time1;
time1=time2;
time2=temp;
}
y1=time1/10000,m1=time1%10000/100,d1=time1%100;
y2=time2/10000,m2=time2%10000/100,d2=time2%100;
int ans=1;//记录结果
while(y1<y2||m1<m2||d1<d2){
d1++;
if(d1==month[m1][isLeap(y1)]+1){//满当月天数
m1++;
d1=1;
}
if(m1==13){
y1++;
m1=1;
}
ans++;//累加
}
printf("%d\n",ans);
}
return 0;
}
运行结果:
B题:Day of Week
题目链接:http://codeup.cn/problem.php?cid=100000578&pid=1
#include<iostream>
#include<cstring>
#define ISLEAP(x) (x%4==0&&x%100!=0)||x%400==0?1:0
using namespace std;
int YofM[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
};
struct Date {
int date;
int month;
int year;
Date() {
date = 1; month = 0; year = 0;
}
void nextdate() {
date++;
if (date>YofM[month][ISLEAP(year)]) {
month++;
date = 1;
if (month>12)
{
year++; month = 1;
}
}//if
}
};
char monthName[13][20] = {
"","January","February","March","April","May","June","July",
"August","September","October","November","December"
};
char weekName[7][20] = {
"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
};
int Daycount[3001][13][32];
int main() {
Date D;
int num = 0;
while (D.year <= 3000) {
Daycount[D.year][D.month][D.date] = num;
D.nextdate();
num++;
}//while
int d, m, y;
char s[20];
while (cin >> d >> s >> y) {
for (m = 1; m<13; m++) {
if (strcmp(s, monthName[m]) == 0) { break; }
}//for
int i = Daycount[y][m][d] - Daycount[2018][2][25];
cout << weekName[(i % 7 + 7) % 7];
}//while
return 0;
}
结果:
注意:测试结果有问题没解决
C题:打印日期
题目链接:http://codeup.cn/problem.php?cid=100000578&pid=2
#include<stdio.h>
int month[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}}; //全局变量
bool isLeep(int year) {
return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
}
int main () {
int y, n, m, d;
while(scanf("%d%d", &y, &n) != EOF){
d = 0, m = 1;
for(int i = 0; i < n; i++){
if(d == month[m][isLeep(y)] ){
m++;
d = 0;
}
if(m == 13){
y++;
m = 1;
}
d++;
}
printf("%04d-%02d-%02d\n", y, m, d); // 年份也左对齐,保留四位!!! 否则答案错误50
}
return 0;
}
运行结果:
D题:日期类
题目链接:http://codeup.cn/problem.php?cid=100000578&pid=3
#include <cstdio>
int monthNumber[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}
};
bool isLeap(int year){
return (year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
int y,m,d,n=1;
int m1;
scanf("%d", &m1);
while(m1>0){
scanf("%d%d%d", &y, &m, &d);
while(n>0){
d++;
if(d==monthNumber[m][isLeap(y)]+1){
m++;
d=1;
}
if(m==13){
y++;
m=1;
}
n--;
}
printf("%04d-%02d-%02d\n", y, m, d);
m=1, d=0, n=1;
m1--;
}
return 0;
}
运行结果:
E题:日期累加
题目链接:http://codeup.cn/problem.php?cid=100000578&pid=4
#include <cstdio>
int monthNumber[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}
};
bool isLeap(int year){
return (year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
int y,m,d,add;
int m1;
scanf("%d", &m1);
while(m1>0){
scanf("%d%d%d%d", &y, &m, &d,&add);
while(add>0){
d++;
if(d==monthNumber[m][isLeap(y)]+1){
m++;
d=1;
}
if(m==13){
y++;
m=1;
}
add--;
}
printf("%04d-%02d-%02d\n", y, m, d);
m=1, d=0;
m1--;
}
return 0;
}
运行结果: