恶臭数字论证器
如果不知道恶臭数字论证器是什么的,具体情况可以参考这个网站:恶臭数字论证器
现在我们要做的就是手写一个跟这个差不多的恶臭数字论证器。
原理
众所周知,一个数字 x x x 可以拆成每一个数位上的数字 x 0 , x 2 , x 3 , ⋯ , x n x0, x2, x3, \cdots, x_n x0,x2,x3,⋯,xn,具体举个例子,就是 123 123 123 可以拆成 1 , 2 , 3 1, 2, 3 1,2,3。并且我们可以很轻松的用 { x i } \{x_i\} {xi} 这个数列表示出 x x x 这个数,也就是:
x = ∑ i = 0 n x i 1 0 i x = \sum_{i = 0}^n x_i10^i x=i=0∑nxi10i
这里观察一下,我们发现一下性质,也就是 x i ≤ 9 x_i \leq 9 xi≤9,非常的显然,所以如果我们把 1 ∼ 9 1 \sim 9 1∼9 的数字全部都用 114514 114514 114514 表示出来的话,那么任意数字小于 1 e 10 1e10 1e10 的数字就可以恶臭的论证了。
代码
#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;
}
后记
这个玩意儿功能还不是很齐全,比如不能表示小数,不能表示比 1 e 10 1e10 1e10 更大的数之类的,所以才叫简化版嘛,看这玩意儿也就图一乐。文章来源:https://www.toymoban.com/news/detail-454775.html
最后,114514(喜。文章来源地址https://www.toymoban.com/news/detail-454775.html
到了这里,关于恶臭数字论证器 -- 简化版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!