随机生成一个二十位的二进制数

beil0eve 2018-06-29 02:01:43
想随机生成一个二十位的二进制数 比如“00101001001011101010”这样的一个数组 要随机生成的
一直搞不出来 哪位大佬帮个忙
...全文
740 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdonghai 2018-06-30
  • 打赏
  • 举报
回复
确实是把简单的问题搞得复杂了一点,用01随机是最简单的,我觉得上面的代码里面的Randomize函数应该
是放在循环外面,而不是放在循环里面。
秋天之落叶 2018-06-30
  • 打赏
  • 举报
回复
引用 10 楼 wdonghai 的回复:
确实是把简单的问题搞得复杂了一点,用01随机是最简单的,我觉得上面的代码里面的Randomize函数应该
是放在循环外面,而不是放在循环里面。

我用XE10.2.3版本,不管是放在循环里面还是外面,还是不用这个函数,都不影响结果。不知道为什么?
秋天之落叶 2018-06-29
  • 打赏
  • 举报
回复
不过我发现一个问题,高版本中用不用Randomize都一样,好像初始化不起作用了
秋天之落叶 2018-06-29
  • 打赏
  • 举报
回复
引用 7 楼 lyhoo163 的回复:
function GetRan(N:integer):String;
var i:integer;
S:string;
begin
GetRan:='';
S:='';
for i:=1 to N do
begin
Randomize;
n:=Random(2);
S:=S+Inttostr(N);
end;
GetRan:=S;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=GetRan(20);
end;
上述代码,需要修改一下。这样,就可以了。

就是啊,这样多简单,为什么要写的那么复杂?确实不理解
lyhoo163 2018-06-29
  • 打赏
  • 举报
回复
function GetRan(N:integer):String;
var i:integer;
S:string;
begin
GetRan:='';
S:='';
for i:=1 to N do
begin
Randomize;
n:=Random(2);
S:=S+Inttostr(N);
end;
GetRan:=S;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=GetRan(20);
end;
上述代码,需要修改一下。这样,就可以了。
lyhoo163 2018-06-29
  • 打赏
  • 举报
回复
function GetRan(i:integer):String;
var n:integer;
S:string;
begin
GetRan:='';
S:='';
for i:=1 to 20 do
begin
Randomize;
n:=Random(2);
S:=S+Inttostr(N);
end;
GetRan:=S;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=GetRan(20);
end;
秋天之落叶 2018-06-29
  • 打赏
  • 举报
回复
高手们都这么复杂啊,要是我,就用Random(2)生成0和1,然后循环20次,难道不行吗?
wdonghai 2018-06-29
  • 打赏
  • 举报
回复
楼主是不是把IntToBin函数当成了IntToStr了呀,麻烦楼主看仔细一点,里面有个自定义函数IntToBin
  • 打赏
  • 举报
回复
20位二进制数,直接:
var
n: integer;
//...
Randomize;
n := Random(1048576);
如果需要用数组或者串存储,把n的低20位转换一下就可以了。
beil0eve 2018-06-29
  • 打赏
  • 举报
回复
引用 1 楼 wdonghai 的回复:

function inttoBin(i:integer): string;
begin
result:='';
while i <>0 do
begin //i mod 2取模,再使用format格式化
result:=Format('%d'+result,[i mod 2]);
i:=i div 2;
end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,iValue:Integer;
s:string;

function AppendZero(AZeroCount:Integer):string;
var
i:integer;
begin
result:='';
for i:=1 to AZeroCount do
result:=result+'0';
end;
begin
memo1.Clear;
Randomize;
for i:=1 to 10 do
begin
iValue:=RandomRange(10000,99999);//随机生成一个5位数
s:=inttobin(iValue);
s:=AppendZero(20-length(s))+s; //不够20位就在前面补0
memo1.Lines.Add(inttostr(iValue)+' '+s);
end;
end;


这个生成的这样的
57433 00000000000000057433
46477 00000000000000046477
39655 00000000000000039655
15875 00000000000000015875
83832 00000000000000083832
76405 00000000000000076405是一个5位前面补零
不是我说的一个二十位的二进制数列

wdonghai 2018-06-29
  • 打赏
  • 举报
回复

function inttoBin(i:integer): string;
begin
result:='';
while i <>0 do
begin //i mod 2取模,再使用format格式化
result:=Format('%d'+result,[i mod 2]);
i:=i div 2;
end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,iValue:Integer;
s:string;

function AppendZero(AZeroCount:Integer):string;
var
i:integer;
begin
result:='';
for i:=1 to AZeroCount do
result:=result+'0';
end;
begin
memo1.Clear;
Randomize;
for i:=1 to 10 do
begin
iValue:=RandomRange(10000,99999);//随机生成一个5位数
s:=inttobin(iValue);
s:=AppendZero(20-length(s))+s; //不够20位就在前面补0
memo1.Lines.Add(inttostr(iValue)+' '+s);
end;
end;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧