将十进制转化为二进制
例题:将十进制转化为二进制。(输入的数不大于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还要做一次处理。没有它的那么更进一步,那么精巧。
收获:代码只是实现,具体的思想是数学。数学设计的好,程序才能好。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 感觉程序员要被 AI 淘汰了?学什么才有机会?
· BotSharp + MCP 三步实现智能体开发
· “你觉得客户需要”是杀死TA的最后一根稻草 | IPD集成产品开发
· dify升级,PostgreSQL数据库字段更新处理
· Java 与 LLM 大模型融合的技术革命:JBoltAI 如何重构企业级 AI 开发范式