随机数模板

今天我写了几个随机数的函数,在这里分享给大家:

#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,容易出现负数或不在指定范围内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值