题意:
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
方法一:
数组模拟
思路:用数组存储每月的天数。
首先,遍历月份,累加上每月的天数;再加上日数;最后,判断是否是闰年并且月份大于2,如果是,则加一。
#include <bits/stdc++.h> using namespace std; int month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int main(){ int y,m,d; cin >> y >> m >> d;//输入年月日 int sum=0; for(int i=1;i<m;i++){//加每月的天数 sum+=month[i-1]; } sum+=d;//加日数 if(((y%4==0&&y%100!=0)||y%400==0)&&m>2)//闰年并且月份大于2,则加一 sum++; cout << sum << endl; return 0; }
时间复杂度:空间复杂度:
方法二:
直接模拟
思路:思路跟方法一 一致。
不过不需要数组存储月份的天数,直接通过 多IF语句 实现累加效果。
#include <bits/stdc++.h> using namespace std; int main(){ int y,m,d; cin >> y >> m >> d;//输入年月日 int sum=0; //加每月的天数 if(m>1) sum+=31; if(m>2) sum+=28; if(m>3) sum+=31; if(m>4) sum+=30; if(m>5) sum+=31; if(m>6) sum+=30; if(m>7) sum+=31; if(m>8) sum+=31; if(m>9) sum+=30; if(m>10) sum+=31; if(m>11) sum+=30; sum+=d;//加日数 if(((y%4==0&&y%100!=0)||y%400==0)&&m>2)//闰年并且月份大于2,则加一 sum++; cout << sum << endl; return 0; }
时间复杂度:空间复杂度: