今天我写了几个随机数的函数,在这里分享给大家:
#include <bits/stdc++.h>
#include <unistd.h>
typedef long long ll;
typedef double db;
typedef long double ldb;
using namespace std;
ll random(ll begin, ll end, ll num = 1) { // 在[begin, end]区间内生成
if(begin == end) {
return begin;
}
if(begin > end) {
assert(0);
return 0;
}
if(begin <= 0) {
ll t = 0 - begin + 1;
return random(begin + t,end + t) - t;
}
ll ans = 1;
for(ll i = 1;i <= num;++i) {
ans = (ans * rand()) % (end - begin + 1) + 1;
}
return ans;
}
string random_string(ll len, string str = "abcdefghijklmnopqrstuvwxyz", ll num = 1) { // 指定长度, 用str里的字符生成, 依赖random函数
if(len < 0) {
assert(0);
return 0;
}
ll slen = str.size();
string ans;
while(len--) {
ans += str[random(0, slen-1, num)];
}
return ans;
}
string random_string(ll min_len, ll max_len, string str = "abcdefghijklmnopqrstuvwxyz", ll len_num = 1, ll num = 1) {
if(min_len > max_len || min_len < 0 || max_len < 0) { // 重载random_string, 指定最小和最大长度, 其他参数同上面, 依赖random和random_string(指定长度的)
assert(0);
return 0;
}
ll len = random(min_len, max_len, len_num);
return random_string(len, str, num);
}
int main() {
srand(time(NULL)); // 需要先调用srand(time(NULL))
cout << random(-1e5, 1e5) << endl; // 在[-1e5, 1e5]的区间生成随机数
cout << random_string(100) << endl; // 生成长度为100的字符串
cout << random_string(1, 100) << endl; // 生成长度在[1, 100]的字符串
return 0;
}
关于num
参数:
如果生成较大的数可以稍微将
num
调大一点
当num
特别大的时候,比如100100100,容易出现负数或不在指定范围内