挺有意思的
看这个
首先解释一下这题什么意思:
JavaScript 是一种功能强大且灵活的编程语言,也是现代 Web 开发的三大支柱之一 (另外两个是 HTML 和 CSS)。灵活的 JavaScript 包含“自动类型转换”的语言特性。例如,JavaScript 认为
[]
(空数组)和0
是可以比较且相等的。自动类型转换带来的一个后果是我们可以只用()+[]!
这 66 个字符编写任意功能的 JavaScript 程序,包括游戏和交互网页。
[]
空数组,在 JS 中与 0 相等,但两个空数组相加返回的是一个字符串,而在[]
前直接加+
会被强转为整型。+
加号,就是加法,也可以连接字符串或将字符串转为整型。()
改变运算符优先级,与C++
中相同。!
表示非运算,对于true
返回为false
,对于false
返回为true
。与C++
相同。
题目懂了,看看思路。
首先用 n 个+!+[]
代表一个整数 n 。但是这样会输出超限,所以需要通过字符串转整数的方式实现。
我们把输入的整数拆开,例:
123456789
1 2 3 4 5 6 7 8 9
再以字符串的形式处理(整数后+[]
可转为字符串)
123456789
[+!+[]]+[!+[]+!+[]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]
最后使用+
转为整数。
核心代码:
cout<<"+(";
int len=s.size();
for(int i=0;i<len;i++){
if(i) cout<<"+";
cout<<"(";
int n=s[i]-'0';
for(int j=1;j<=n;j++){
cout<<"+!+[]";
}
cout<<"+[])";
}
cout<<")";