c++ - 用天数推算出准确的月份
问题描述
我有一个函数可以从给定的天数中提取月份(days > 0 && days < 366):
int findMonth(int days)
{
int i, months[] = {31,28,31,30,31,30,31,31,30,31,30,31};
for (i = 0; i < 12 && days > 0;i++)
days -= months[i];
return i;
}
有没有更合理的推断方法?(我忽略了闰年)
解决方案
如果你想让它更短,我认为你不能。如果你只是想要一些不同的东西,也许更接近 C++,你可以试试这个:
int findMonth(int days) {
int i = 0, months[] = {31,28,31,30,31,30,31,31,30,31,30,31};
return std::count_if(std::begin(months), std::end(months), [&i, &days](int x) { return (i += x) - x <= days; });
}
或使用std::vector
:
int findMonth(int days) {
int i = 0;
std::vector<int> months = {31,28,31,30,31,30,31,31,30,31,30,31};
return std::count_if(months.begin(), months.end(), [&i, &days](int x) { return (i += x) - x <= days; });
}
推荐阅读
- javascript - 如果省略 to,MailApp 发送消息失败
- xamarin - Binding string with Button
- java - Kafka不使用偏移量而是通过记录的字段从主题中删除记录
- php - 从 php 中的 xml 文件中提取内容并将其解析为表行
- dart - 试图找出泛型,但无法理解什么
在这段代码中意味着 - java - 摆动拉绳居中
- visual-studio - Visual Studio 2019 中缺少“新网站”选项
- c - 我想要一个现有的程序在小时候为两个外部进程工作
- r - 创建包的功能仅在手动加载时有效
- android - 首先从缓存中检索数据然后从 RxJava 中的网络调用中检索数据的最佳方法是什么?(concat concatEager,merge)