欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

恶臭数字论证器 -- 简化版

发布时间: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=0nxi10i

  这里观察一下,我们发现一下性质,也就是 xi≤9x_i \leq 9xi9,非常的显然,所以如果我们把 1∼91 \sim 919 的数字全部都用 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(喜。

总结

以上是生活随笔为你收集整理的恶臭数字论证器 -- 简化版的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。