我想生成一个非常长的整数随机数,我希望它是224位随机数。但我能找到的最长数据类型是无符号长long,即64位。首先我这样做了:
#include <iostream>
#include <string>
#include <stdint.h>
#include <stdlib.h>
#include <ctime>
#include "random.h"
int main()
{
srand(time(0));
unsigned long long num1 = rand();
unsigned long long num2 = rand();
cout<<"1st random number = " << num1 << endl;
cout<<"2nd random number = " << num2 << endl;
return 0;
}
我的想法是定义224位整数的新数据类型。 所以我尝试制作新的random.h文件:
class int224
{
unsigned int data[7];
}
然后修改了第一个代码:
#include <iostream>
#include <string>
#include <stdint.h>
#include <stdlib.h>
#include <ctime>
#include "random.h"
int main()
{
srand(time(0));
int224 num1 = rand();
int224 num2 = rand();
cout<<"1st random number = " << num1 << endl;
cout<<"2nd random number = " << num2 << endl;
return 0;
}
但是它返回了错误,也许我在定义新数据类型时犯了一个错误,我感谢任何帮助。谢谢。
答案 0 :(得分:1)
你没有生成随机int224
的函数,编译器也不知道该类。
您可以在Rand()
中创建自己的int224
功能并使用它。该函数将随机数放在每个数组的单元格中
答案 1 :(得分:1)
它不能那样工作。内置的rand函数返回一个int
,你不能通过将结果赋值给更大的值来使它返回更大的值。您将不得不实现更复杂的逻辑,并使用一些调用rand
来初始化结果中的不同后续位。
答案 2 :(得分:1)
由于你在类中定义了一个7的数组,你将不得不调用rand函数7次来初始化每个元素。
此外,如果你想要你的号码是无符号的,那么它很好,但如果你想让它们被签名,那么在访问这些号码时要小心,你将前6个作为无符号,最后一个作为签名。
答案 3 :(得分:1)
我想出了以下内容,不确定这是否适合你
#include <iostream>
#include <chrono>
#include <random>
struct int224
{
unsigned int data[7];
int224 operator+(int224);
int224 operator-(int224);
int224 ()
{
unsigned seed =
std::chrono::system_clock::now().time_since_epoch().count();
std::minstd_rand0 mygen (seed);
for(auto i=0;i<7;i++)
data[i]=mygen();
}
friend std::ostream& operator<<(std::ostream&, const int224&);
};
std::ostream& operator<<(std::ostream& os, const int224& r)
{
for(auto i=0;i<7;i++)
os<<r.data[i];
return os;
}
int main ()
{
int224 r;
std::cout<<r<<std::endl;
int224 j;
std::cout<<j;
return 0;
}