3230391 2008-05-29 05:54:00
点我顶贴
收藏
删除
把一个数字转换成2进制
program ssss;
var
a:array[1..100] of 0..1;
len,i,n:longint;
begin
readln(n);
i:=1;
while n>0 do begin
a[i]:=n mod 2;
n:=n div 2;
inc(i);
end;
i:=100;
while (a[i]=0) and (i>1)do dec(i);
len:=i;
for i:=len downto 1 do write(a[i]);
readln;
end.
程序我知道是这样的
但是有没人能告诉我原理呢?
while n>0 do begin
a[i]:=n mod 2;
n:=n div 2;
inc(i);
end;
特别是这段~~
谢谢大家了呵
#3 wolf_love757@2008-05-29 04:25:00
1718
回复
删除
二进制的转换应该学过吧(数学中的)
除二取余(这个不会就去百度上搜)
i记录二进制位数
a数组记录这个二进制的倒序
n记录整除2后的数
#4 heyuntian1022@2008-05-29 05:54:00
1722
回复
删除
这是短除法;
不停除以2,取余,直到原数被除到0。将之前的余数按先后相反顺序排列。
Example:23转化为2进制
原数 余数
23 1(23 mod 2=1)
11(23 div 2) 1
5 1
2 0
1 1
0 over……
所以(23)10=(10111)2
自己消化消化