一道有意思的好题(不要看它是道绿题)


挺有意思的水题好题
看这个
首先解释一下这题什么意思:

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<<")";
1 个赞