Jak*_*old 1 c++ expression inline
我有这个疯狂的家庭作业,我必须创建一个表达来验证朱利安和格里高利历和许多其他事情的日期......
问题是它必须全部在一个表达式中,所以我不能使用任何表达式 ;
有没有在表达式中定义变量的选项?就像是
d < 31 && (bool leapyear = y % 4 == 0) || (leapyear ? d % 2 : 3) ....
Run Code Online (Sandbox Code Playgroud)
我可以在哪里定义和初始化一个或多个变量并在一个表达式中使用它们而不使用任何变量;?
编辑:明确地说,它必须是一行表达式.没有功能..
我现在正在做的就是编写宏并扩展它们,所以我最终得到了这样的东西
#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 ....
Run Code Online (Sandbox Code Playgroud)
看起来这是解决问题的唯一合适方式
编辑:这是原始问题
假设我们有变量d m并y包含日,月和年.任务是写一个单独的表达式,决定日期是否有效.如果date有效,则值应为true(非零值);如果date无效,则值为false(零).
这是表达式的一个例子(正确的表达式看起来像这样):
d + 4 == y ^ 85 ? ~m : d * (y-2)
Run Code Online (Sandbox Code Playgroud)
这些是错误答案的例子(不是表达式):
if ( log ( d ) == 1752 ) m = 1;
Run Code Online (Sandbox Code Playgroud)
要么:
for ( i = 0; i < 32; i ++ ) m = m / 2;
Run Code Online (Sandbox Code Playgroud)
仅提交仅包含一个表达式的文件,而;不是最后一个.不要提交命令或整个程序.
((m >0)&&(m<13)&&(d>0)&&(d<32)&&(y!=0)&&(((d==31)&&
((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12)))
||((d<31)&&((m!=2)||(d<29)))||((d==29)&&(m==2)&&((y<=1752)?((y%4)==0):
((((y%4)==0)&&((y%100)!=0))
||((y%400)==0)))))&&(((y==1752)&&(m==9))?((d<3)||(d>13)):true))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1254 次 |
| 最近记录: |