创建一个程序,使用表达式交替两边的元素来求解数学表达式。这样做的方法是,先阅读第一个字符,然后阅读最后一个,然后阅读第二个字符,再阅读第二个字符,再读另一个字符,而不是从左到右阅读。这将为您提供一个新的表达式,您必须对其进行计算和输出。
a*b/c+d-e
135798642 <-- Order you read the expression in
ae*-bd/+c <-- Order of operation.
例:
1*3/2+4-5
15*-34/+2 = -255
如果表达式不起作用,则1
必须将其插入必要的位置以使其起作用。
一些示例可能会更好地说明它:
Input: 1+1+1+1+1
Result: 23 // Because 1+1+1+1+1 -> 11++11++1 -> 23
Input: 1+2-3+12-5
Result: -19 // Because 1+2-3+12-5 -> 15+-22-13+ -> 15+-22-13+1 -> -19
// |
// Not valid expression
Input: 2*2*2*2*2
Result: 968 // Because 2*2*2*2*2 -> 22**22**2 -> 22*1*22*1*2 -> 968
// || ||
// Not valid, 1 must be inserted
Input: 17/2
Output: 127 // Because 17/2 = 127/ -> 127/1 -> 127
必须支持的运算符为+ - * /
。不会有括号。使用正常的数学规则和“语法”,因此例如**
并不意味着求幂。a++++1
等价于a+1
(即MATLAB风格,而不是C ++)。
如有疑问,一些有效的操作是:
-a
+a
a++b
a+-b
a*-b
a*+b
a*++b
a/b
a/-b
a/+b
-a/--b
虽然以下所有无效。显示了它们应替换为:
a+ | a+1
a- | a-1
a++++ | a++++1 (This is equivalent to a+1)
a*+++ | a*+++1 (This is equivalent to a*1)
a**b | a*1*b
a*/b | a*1/b
a/*b | a/1*b
a* | a*1
*a | 1*a
***a | 1*1*1*a
规则:
- 该代码可以是函数或完整程序
- 输入可以是STDIN或函数参数
- 输入的内容必须是有效的数学表达式,且不带引号
''
或""
。 - 输出应为新表达式的答案,以整数,十进制或简化的分数表示。
- 小数点后必须至少支持三位数字。所以
1/3 = 0.333
,不是0.33
。0.333333333
被接受。 ans = ...
被接受。- 开头和结尾的换行符和空格均被接受。
- 输入只会是整数
- 零除可能导致错误,NaN,Inf等。不接受输出数字。
与往常一样,以字节为单位的最短代码获胜。从挑战发布之日起的一周内将选出一名优胜者。如果发布的答案比当前的领导者短,则仍然可以获胜。
“输出应该是答案[ ... ] 简化分数 ...”,因此,
—
猫
0/0
如果表达式等于整数除法或取零模,我可以返回吗?
如果答案为零,
—
Stewie Griffin 2015年
x/0
则为有效输出。只要它没有输出错误的答案就可以。错误和“非数字”在定义上是正确的,并且无穷大是“足够正确”,
可以确定-可以使用eval对吗?
—
orlp 2015年
是的,评估是可以的。
—
Stewie Griffin 2015年
2^64
,它是否会出错或自动换行?