我有这个疯狂的作业,我必须创建一个表达式来验证关于儒略历和公历以及许多其他东西的日期......
问题是它必须全部在一个表达式中,所以我不能使用任何;
是否有在表达式中定义变量的选项?就像是
d < 31 && (bool leapyear = y % 4 == 0) || (leapyear ? d % 2 : 3) ....
我可以在哪里定义和初始化一个或多个变量,并在一个表达式中使用它们而不使用任何;
?
编辑:明确地说,它必须是一个单行表达式。没有功能..
我现在这样做的方式是编写宏并扩展它们,所以我最终得到了这样的东西
#define isJulian(d, m, y) (y < 1751 || (y == 1752 && (m < 9) || (m == 9 && d <= 2)))
#define isJulianLoopYear(y) (y % 4 == 0)
#define isGregorian(d, m, y) (y > 1573 || (y == 1752 && (m > 9) || (m == 9 && d > 13)))
#define isGregorianLoopYear(y) ((y % 4 == 0) || (y % 400 = 0))
// etc etc ....
看起来这是解决问题的唯一合适方法
编辑:这是原始问题
假设我们有变量d
m
并y
包含日、月和年。任务是编写一个表达式来决定日期是否有效。如果日期有效,则值应为真(非零值),如果日期无效,则应为假(零)。
这是一个表达式示例(正确的表达式看起来像这样):
d + 4 == y ^ 85 ? ~m : d * (y-2)
这些是错误答案的示例(不是表达式):
if ( log ( d ) == 1752 ) m = 1;
或者:
for ( i = 0; i < 32; i ++ ) m = m / 2;
仅提交仅包含一个表达式的文件,而不;
在末尾。不要提交命令或整个程序。
- 2.9.1752 之前是儒略历,之后是公历
- 在儒略历中,闰年每年可被 4 整除。
- 在公历中每年都是闰年,可以被 4 整除,但不能被 100 整除。可以被 400 整除的年份是另一个例外,是闰年。
- 1800, 1801, 1802, 1803, 1805, 1806, ....,1899, 1900, 1901, ... ,2100, ..., 2200 不是循环年份。
- 1896, 1904, 1908, ..., 1996, 2000, 2004, ..., 2396,..., 2396, 2400 是循环年
- 1752 年 9 月是另一个例外,当 2.9.1752 之后是 14.9.1752 时,因此日期 3.9.1752、4.9.1752、...、13.9.1752 无效。