日期模拟类型的总结
1. 计算天数
#include <stdio.h>
#include <iostream>
using namespace std;
#define ISYEAP(x) x%4==0&&x%100!=0||x%400==0?1:0
int main()
{
int n,y,m,d,x;
int a[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
};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d%d",&y,&m,&d);
int cd = 1, cm = 1, ans;
for(int i=1;i<365;i++){
if(cd == d && cm == m){
ans = i;
break;
}
cd++;
if(cd>a[cm][ISYEAP(y)]){
cd=1;
cm++;
if(cm>12){
cm=1;
y++;
}
}
}
printf("%d\n", ans);
}
return 0;
}
2. 日期类
#include <stdio.h>
#include <iostream>
using namespace std;
#define ISYEAP(x) x%4==0&&x%100!=0||x%400==0?1:0
int main()
{
int n,y,m,d,x;
int a[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
};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d%d",&y,&m,&d);
for(int i=0;i<1;i++)
{
d++;
if(d>a[m][ISYEAP(y)])
{
d=1;
m++;
if(m>12)
{
m=1;
y++;
}
}
}
printf("%04d-%02d-%02d\n",y,m,d);
}
return 0;
}
3. 日期累加
#include <stdio.h>
#define ISYEAP(x) x%4==0&&x%100!=0||x%400==0?1:0
int main()
{
int n,y,m,d,x;
int a[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
};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d%d%d",&y,&m,&d,&x);
for(int i=0;i<x;i++)
{
d++;
if(d>a[m][ISYEAP(y)])
{
d=1;
m++;
if(m>12)
{
m=1;
y++;
}
}
}
printf("%04d-%02d-%02d\n",y,m,d);
}
return 0;
}
4. 打印日期
还是行少列多舒服.
#include<iostream>
#include<cstdio>
using namespace std;
int daytab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
//判断闰年
bool IsReapYear(int year){
return (year%4==0&&year%100!=0)||(year%400==0);
}
int main(){
int year,month,day;
int number;
while(cin>>year>>number){
month = 0;
int row = IsReapYear(year);
while(number > daytab[row][month]){
number -= daytab[row][month];
month++;
}
day = number;
printf("%04d-%02d-%02d\n",year,month,day);
}
return 0;
}