当前位置: 首页 > news >正文

Windows批处理数值计算实战

文章目录

    • 需求和框架
    • 转二进制
    • 最大公约数和最小公倍数
    • 打印乘法表

源码:https://download.csdn.net/download/m0_37816922/89070635

需求和框架

为了巩固命令行的编程技巧,下面编写一个批处理程序,用以实现如下8种功能。

在这里插入图片描述

其中框架代码如下,首先关闭回显;然后来一个start标签,每次计算完成之后,都要回到这个标签处。%Mode%用于选择不同的计算功能,当输入不同的数字时,将跳转到不同的Model,这些Model标签,将在后续补充完整。本文对前四个功能进行讲解。

@echo off
:start
echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
echo ┃            工作模式			┃
echo ┃  1  2的n次方  2  二进制转换		┃
echo ┃  3  最大公约数和最小公倍数		┃
echo ┃  4  打印乘法表 5 打印幻方		┃
echo ┃  6  查找勾股数 7 查找水仙花数		┃
echo ┃  8  生成随机数 			┃
echo ┃  其他输入均退出			┃
echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛set /P Mode=请输入计算模式:if %Mode%==0 (goto :eof
)else if %Mode%==1 (goto :Mode1
)else if %Mode%==2 (goto :Mode2
)else if %Mode%==3 (goto :Mode3
)else if %Mode%==4 (goto :Mode4
)else if %Mode%==5 (goto :Mode5
)else if %Mode%==6 (goto :Mode6
)else if %Mode%==7 (goto :Mode7
)else if %Mode%==8 (goto :Mode8
)else if %Mode%==9 (goto :Mode9
)else (goto :eof
)

转二进制

二进制转换是经常遇到的一个需求,批处理可以非常便捷地完成这个工作。而二进制转化过程中,第一步就是和 2 n 2^n 2n比较大小,所以在实现这个功能之前,不妨实现一个计算2的n次方的功能,代码如下

:Mode1
set /P N=请输入一个数字:
set /a NN=1"<<"%N%
echo 2的%N%次方等于%NN%
pause
goto :start

转二进制的逻辑就是,从高位到低位,对输入数值和 2 n 2^n 2n做比较,如果大于 2 n 2^n 2n,那么第 n n n位就设为1,同时减去 2 n 2^n 2n,否则这一位就是0。由于批处理的数字实质上是有符号的32位整型,所以能够转换的最大整数就是 2 31 − 1 2^{31}-1 2311

代码如下

:Mode2
setlocal enabledelayedexpansion
set /P N=请输入一个数字:set str=0b
for /L %%i in (30, -1, 0)do (set /a div=1"<<"%%iif !N! geq !div! (set /a N=!N!-!div!set str=!str!1)else (set str=!str!0)
)
echo 二进制转化结果:%str%
pause
goto:start

计算结果为

请输入计算模式:2
请输入一个数字:25
二进制转化结果:0b0000000000000000000000000011001

最大公约数和最小公倍数

辗转相除法可以说十分经典了

:Mode3set/p a=输入第一个数
set/p b=输入第二个数
set/a ab=%a%*%b%
set str= %a%和%b%的:gcdloop
set/a num2=%a%%%b%
if %num2% gtr 0 set/a a=%b%&set/a b=%num2%&goto gcdloop
set /a num=%ab%/%b%
echo %str%最大公约数为%b%;最小公倍数为%num%
pause
goto:start

打印乘法表

打印乘法表的时候有个问题,就是echo完事儿之后是默认要回车的,所以每次做完乘法之后,若直接echo出去,那就做不出来所谓的“表”了,为了能真正打印出一张表,所以用P模式的set命令来进行输入。

而且貌似批处理没法单独打印空格或者制表位,所以在制表位前面加个小数点,最后得到的乘法表就像下面这样

在这里插入图片描述

代码如下

:: 模式4 打印乘法表
:Mode4
SETLOCAL ENABLEDELAYEDEXPANSION
set line=━━━━━━━━━━━━━━━━━━━━━━━
echo ┏%line%%line%%line%━━┓
for /L %%i in (1,1,9) do (set /p="┃ " < nulfor /L %%j in (1,1,%%i) do (set /a h=%%i*%%jset /p =%%i×%%j^=!h!	<nul)for /L %%j in (%%i,1,8) do (set /p =.	<nul)echo ┃
)
echo ┗%line%%line%%line%━━┛
pause
goto:start

相关文章:

  • Twitter Api查询用户粉丝列表
  • vue 使用自定义标签URL Protocol 调用本地exe 并传参
  • Pycharm+Neo4j红楼梦人物关系图谱
  • Golang 开发实战day07 - Functions
  • 关于在PyCharm中使用虚拟环境
  • 04 - 7 段 16 进制数码管显示
  • DIY蓝牙键盘(1) - 理解 键盘报文(免费)
  • JAX深度学习库入门
  • JS实现双向数据绑定的三种方式
  • 面试题:RabbitMQ 消息队列中间件
  • 基于ssm的轻型卡车零部件销售平台(java项目+文档+源码)
  • 站群服务器如何提高搜索引擎排名
  • Linux中部署Java jar 包 shell 脚本
  • Excel中文显示问号
  • 多媒体编解码
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • ➹使用webpack配置多页面应用(MPA)
  • Debian下无root权限使用Python访问Oracle
  • extjs4学习之配置
  • Java 内存分配及垃圾回收机制初探
  • Koa2 之文件上传下载
  • leetcode388. Longest Absolute File Path
  • leetcode46 Permutation 排列组合
  • Magento 1.x 中文订单打印乱码
  • npx命令介绍
  • Vue UI框架库开发介绍
  • Vue2 SSR 的优化之旅
  • 订阅Forge Viewer所有的事件
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 使用SAX解析XML
  • 用element的upload组件实现多图片上传和压缩
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #DBA杂记1
  • $().each和$.each的区别
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (利用IDEA+Maven)定制属于自己的jar包
  • (转)EXC_BREAKPOINT僵尸错误
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .bat文件调用java类的main方法
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET delegate 委托 、 Event 事件
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • /*在DataTable中更新、删除数据*/
  • /bin/rm: 参数列表过长"的解决办法
  • @Builder用法
  • @Conditional注解详解
  • @Transactional 竟也能解决分布式事务?
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例