当前位置:
首页 >
恶臭数字论证器 -- 简化版
发布时间:2024/3/24
68
豆豆
生活随笔
收集整理的这篇文章主要介绍了
恶臭数字论证器 -- 简化版
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
恶臭数字论证器
如果不知道恶臭数字论证器是什么的,具体情况可以参考这个网站:恶臭数字论证器
现在我们要做的就是手写一个跟这个差不多的恶臭数字论证器。
原理
众所周知,一个数字 xxx 可以拆成每一个数位上的数字 x0,x2,x3,⋯,xnx0, x2, x3, \cdots, x_nx0,x2,x3,⋯,xn,具体举个例子,就是 123123123 可以拆成 1,2,31, 2, 31,2,3。并且我们可以很轻松的用 {xi}\{x_i\}{xi} 这个数列表示出 xxx 这个数,也就是:
x=∑i=0nxi10ix = \sum_{i = 0}^n x_i10^i x=i=0∑nxi10i
这里观察一下,我们发现一下性质,也就是 xi≤9x_i \leq 9xi≤9,非常的显然,所以如果我们把 1∼91 \sim 91∼9 的数字全部都用 114514114514114514 表示出来的话,那么任意数字小于 1e101e101e10 的数字就可以恶臭的论证了。
代码
#include<bits/stdc++.h> using namespace std; #define in read()inline int read(){int x = 0; char c = getchar();while(c < '0' or c > '9') c = getchar();while('0' <= c and c <= '9')x = x * 10 + c - '0', c = getchar();return x; }int num = 0; map<int, string> m;int main(){m[0] = "(1 - 1) * 4514";m[1] = "11 / (45 - 1) * 4";m[2] = "-11 + 4 - 5 + 14";m[3] = "11 * (-4) + 51 - 4";m[4] = "-11 - 4 + 5 + 14";m[5] = "11 - 4 * 5 + 14";m[6] = "1 - 14 + 5 + 14";m[7] = "11 - 4 + 5 - 1 - 4";m[8] = "11 - 4 + 5 / 1 - 4";m[9] = "11 - 4 + 5 + 1 - 4";m[10] = "-11 / 4 + 51 / 4";while(1){num = in;if(num <= 10) { cout << m[num] << '\n'; continue; }int d = num % 10; num /= 10;string ans = m[d];int k = 0;while(num){k++;d = num % 10; num /= 10;if(d == 0) continue;ans += " + ((" + m[d] + ")" + " * " + "(" + m[10] + ")" + " ^ " + "(" + m[k] + ")" + ")";}cout << ans << '\n';}return 0; }后记
这个玩意儿功能还不是很齐全,比如不能表示小数,不能表示比 1e101e101e10 更大的数之类的,所以才叫简化版嘛,看这玩意儿也就图一乐。
最后,114514(喜。
总结
以上是生活随笔为你收集整理的恶臭数字论证器 -- 简化版的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: GreenPlum 时间转换函数
- 下一篇: java的多态代码例子_java多态例子