恶臭数字论证器 -- 简化版
惡臭數(shù)字論證器
? 如果不知道惡臭數(shù)字論證器是什么的,具體情況可以參考這個(gè)網(wǎng)站:惡臭數(shù)字論證器
? 現(xiàn)在我們要做的就是手寫一個(gè)跟這個(gè)差不多的惡臭數(shù)字論證器。
原理
? 眾所周知,一個(gè)數(shù)字 xxx 可以拆成每一個(gè)數(shù)位上的數(shù)字 x0,x2,x3,?,xnx0, x2, x3, \cdots, x_nx0,x2,x3,?,xn?,具體舉個(gè)例子,就是 123123123 可以拆成 1,2,31, 2, 31,2,3。并且我們可以很輕松的用 {xi}\{x_i\}{xi?} 這個(gè)數(shù)列表示出 xxx 這個(gè)數(shù),也就是:
x=∑i=0nxi10ix = \sum_{i = 0}^n x_i10^i x=i=0∑n?xi?10i
? 這里觀察一下,我們發(fā)現(xiàn)一下性質(zhì),也就是 xi≤9x_i \leq 9xi?≤9,非常的顯然,所以如果我們把 1~91 \sim 91~9 的數(shù)字全部都用 114514114514114514 表示出來的話,那么任意數(shù)字小于 1e101e101e10 的數(shù)字就可以惡臭的論證了。
代碼
#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; }后記
? 這個(gè)玩意兒功能還不是很齊全,比如不能表示小數(shù),不能表示比 1e101e101e10 更大的數(shù)之類的,所以才叫簡化版嘛,看這玩意兒也就圖一樂。
? 最后,114514(喜。
總結(jié)
以上是生活随笔為你收集整理的恶臭数字论证器 -- 简化版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GreenPlum 时间转换函数
- 下一篇: java的多态代码例子_java多态例子