將十進制轉化為二進制


例題:將十進制轉化為二進制。(輸入的數不大於10000)

 

program demicalToBinary;

type
arrayType=array[1..14] of integer;

var
arr:arrayType;
k,n,modNum,i,flag,highest:integer;


begin
readln(k);
n:=1;


while k>=2 do
begin
{
writeln('this is in loop,status:k:',k,' n:',n);
}
modNum:=k mod 2;
k:=k div 2;
arr[n]:=modNum;
n:=n+1;
end;

{
writeln('now loop over,status:k:',k,' n:',n);
}
if k=1 
then arr[n]:=1;



flag:=0;
for i:=14 downto 1 do
if arr[i]=1
then 
begin
flag:=1;
highest:=i;
break;
end;

for i:=highest downto 1 do
write(arr[i]);


end.

 上面是我寫的代碼。

寫代碼時的收獲是

把人腦當計算機,人工去執行一遍過程。就能感覺到步驟都很簡單,一步一步的執行出來。

計算機也是這樣執行的,只是它很快,一下就執行好了罷了。

 

代碼改進:大括號里是注釋掉的代碼

Version2:

 

program demicalToBinary;

type
arrayType=array[1..14] of integer;

var
arr:arrayType;
k,n,modNum,i,flag,highest:integer;


begin
readln(k);
n:=1;

{
while k>=2 do
}
while k<>0 do
begin
{
writeln('this is in loop,status:k:',k,' n:',n);
}
modNum:=k mod 2;
k:=k div 2;
arr[n]:=modNum;
n:=n+1;
end;

{
writeln('now loop over,status:k:',k,' n:',n);
}
{
if k=1 
then arr[n]:=1;
}

{
flag:=0;
for i:=14 downto 1 do
if arr[i]=1
then 
begin
flag:=1;
highest:=i;
break;
end;

for i:=highest downto 1 do
write(arr[i]);
}
for i:=n-1 downto 1 do
write(arr[i]);


end.

 

版本2的代碼,其實是做了兩點

第一點是最高位的值,在開始賦值時就可以知道。不用再去求一遍。這里參考答案的代碼確實想的更好。

第二點是最開始賦值的終止條件,不等於0。如果等於0的話,就結束了。而我當時想的條件是最后的值為1,對1還要做一次處理。沒有它的那么更進一步,那么精巧。

 

收獲:代碼只是實現,具體的思想是數學。數學設計的好,程序才能好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM