打表法!!!
数组,循环:小王的生日
要求
1.输出生日时用yyyy-mm-dd的格式,数字不够时补零
2.将天数换算成几月几号
方案:
1.对于Q1:
补零模板:
printf("%04d-%02d-%02d\n",y,m+1,d);
例:"%04d"表示输出一个整型的数,若其数位小于四位数,则补零;若大于四位数,无影响
2.对于Q2:
打表算法模版
用处:将一个数按照规定的方式填补
场景:如计算年月日
模版:
int ds[]={31,28,31,30,31,30,31,31,30,31,30,31};//制表
ds[1]+=y%400==0||(y%4==0&&y%100);//闰年特判
for(m=0;m<12&&d>ds[m];m++) d-=ds[m];//计数
if(m==12) { y++;m=0; }
源码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,y,m,d;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&y,&d);
int ds[]={31,28,31,30,31,30,31,31,30,31,30,31};//制表
ds[1]+=y%400==0||(y%4==0&&y%100);//闰年特判
for(m=0;m<12&&d>ds[m];m++) d-=ds[m];//计数
if(m==12) { y++;m=0; }
printf("%04d-%02d-%02d\n",y,m+1,d);
}
}