本文主要是介绍牛客网 HJ73 计算日期到天数转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
思路:将日期转换为天数需要注意的是
1.这年是不是闰年(这关乎到2月是29天还是28天)
2.是大月还是小月
答案:
#include <stdio.h>
#include<assert.h>
int runnian(int year) //判断是否是闰年
{int res = 0; //默认为假(不是闰年)if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //如果是闰年{res = 1; //为真}return res; //返回真假值
}
int month(int mon, int year) //计算天数
{int i = 0;int sum = 0;int t = runnian(year); //判断这一年是否是闰年的真假值赋值给tfor (i = 1; i < mon; i++) //计算输入月数之前的所有月数的天数和{if (i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12) //如果是大月{sum += 31; }else if (t == 1 && i == 2) //如果是闰年的2月{sum += 29;}else if (t == 0 && i == 2) //如果不是闰年的2月{sum += 28;}else if (i == 4 || i == 6 || i == 9 || i == 11) //如果是小月{sum += 30;}}return sum; //返回之前月份的所有天数和
}
int main()
{int year = 0, mon = 0, day = 0;scanf("%d%d%d", &year, &mon, &day);assert(year >= 1000 && mon <= 12 && day <= 31); //判断是否符合题目要求范围int sum = 0;sum = month(mon, year) + day; //将之前月份的天数和加上本月的日期就是这一年的第几天printf("%d\n", sum); return 0;
}
知识点:
assert()
assert是断言,包含的头文件是<assert.h>,其用法是判断()中的是否成立,如果成立就如果注释一样,不影响其他代码的运行,如果不成立就会直接跳出警告(会提醒不满足assert并且显示该assert在代码中的位置),中止运行。属于辅助程序员检查的一种方式,可用来避免出现野指针等一系列问题。
如果检查完后发现assert里面的表达式已经不可能再出错了,就可以关闭assert(使用assert会增加程序运行时间),在#include<assert.h>上面一行添加#define NDEBUG即可关闭assert
这篇关于牛客网 HJ73 计算日期到天数转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!