[HackerRank]: Day of the Programmer
程序员文章站
2022-04-02 21:28:07
...
解题思路
- 先通过年份判断用Julian日历还是Gregorian日历;
- 然后再按照每个日历判断闰年的方法判断该年份是否闰年;
- 若是闰年把该年2月设为29天,否则为28天;
- 若年分为1918,设2月为15天;
- 计算该年第256天是几月几日
- 最后通过stringstream整理好输出格式,输出结果
代码
string dayOfProgrammer(int year) {
vector<int> months{31,28,31,30,31,30,31,31,30,31,30,31};
if (year >=1700 && year < 1918 && (year % 4 == 0))
{
months[1] = 29;
}
else if (year > 1918 && (year % 400 == 0 || (year % 4 ==0 && year % 100 != 0)))
{
months[1] = 29;
}
else if (year == 1918)
{
months[1] = 15;
}
int count = 0,index = 0;
while(index < 12)
{
if (count + months[index] > 256) break;
count += months[index++];
}
int month = index + 1,day = 256 - count;
stringstream ss;
if (day > 9) ss << day;
else
{
ss << 0 << day;
}
ss << ".";
if (month > 9) ss << month;
else
{
ss << 0 << month;
}
ss << "." << year;
return ss.str();
}
上一篇: HackerRank training-the-army
下一篇: 子数组相关题目:前缀和技巧