@echo off
title 计算器
cls
:one
color 09
echo 输入1位加法 输入2为减法 输入3为乘法 输入4位除法(取余数) 输入5为乘方 输入6为开方 输入7为开立方
set /p a=请输入
cls
if %a%==1 goto jia
if %a%==2 goto jian
if %a%==3 goto cheng
if %a%==4 goto chu
if %a%==5 goto chengfang
if %a%==6 goto kaifang
if %a%==7 goto kailifang
cls
color 04
echo 没有这个选项
echo 请重新选择
ping -n 2 127.0.0.1>nul
cls
goto one
:jia
echo 不支持小数!
color 02
echo 请问您是要进行几次加法运算
echo 输入2位2次,输入3位3次
set /p xuan=请输入
if %xuan%==2 goto jiafayi
if %xuan%==3 goto jiafaer
echo 没有这个选项,请重新选择
ping -n 2 127.0.0.1>nul
cls
goto jia
:jiafayi
set /p jiashu=请输入一个加数
set /p jiashu1=请输入另一个加数
set /a jieguo=%jiashu%+%jiashu1%
echo %jiashu%+%jiashu1%=%jieguo%
pause
echo 正在跳转至主页面
ping -n 2 127.0.0.1>nul
cls
goto one
:jiafaer
set /p jiashu=请输入第一个加数
set /p jiashu1=请输入第二个加数
set /p jiashu2=请输入第三个加数
set /a jieguo=%jiashu%+%jiashu1%+%jiashu2%
echo %jiashu%+%jiashu1%+%jiashu2%=%jieguo%
pause
echo 正在跳转至主页面
ping -n 2 127.0.0.1>nul
cls
goto one
:jian
color 04
echo 不支持小数
set /p jianshu=请输入被减数
set /p beijianshu=请输入减数
set /a jieguo=%jianshu%-%beijianshu%
echo %jianshu%-%beijianshu%=%jieguo%
pause
echo 正在跳转至主页面
ping -n 2 127.0.0.1>nul
cls
goto one
:chu
color 02
set /p beichu=请输入被除数
set /p chu=请输入除数
set /a jieguo=%beichu%/%chu%
set /a yushu=%beichu%-%chu%*%jieguo%
echo %beichu%÷%chu%=%jieguo%……%yushu%
pause
echo 正在跳转至主页面
ping -n 2 127.0.0.1>nul
cls
goto one
:chengfang
set /p dishu=请输入底数
set /p zhishu=请输入指数
set zhi=%dishu%
set jieguo=%zhi%
for /l %%a in (1,1,%zhishu%) do set /a jieguo*=%zhi%
echo %dishu%的%zhishu%次方为%jieguo%
pause
echo 正在跳转至主页面
ping -n 2 127.0.0.1>nul
cls
goto one
:kaifang
color 0e
set /p beikafangshu=被开方数
set /a beikafangshu*=10000,a=beikafangshu
for /l %%i in (1,1,1000) do set /a a=(a+beikafangshu/a)/2
set /a c=a*a,beikafangshu/=10000
echo %beikafangshu%的平方根或近似值为:%a:~,-2%.%a:~-2%
pause
echo 正在跳转至主页面
ping -n 2 127.0.0.1>nul
cls
goto one
:cheng
color 05
set /p yinshu=请输入一个因数
set /p lyinshu=请输入另一个因数
set /a jieguo=%yinshu%*%lyinshu%
echo %yinshu%*%lyinshu%=%jieguo%
pause
echo 正在跳转至主页面
ping -n 2 127.0.0.1>nul
cls
goto one
:kailifang
echo.&echo 本程序支持小数和负数&echo.(借用他人源码)
set /p num=请输入被开立方数 :
set /p degree=请输入结果的小数位数 :
echo.&set symbol=!num:~0,1!
if "!symbol!"=="-" set num=!num:~1!&set /p var=-<nul
for /f "tokens=1,2 delims=." %%i in ("!num!") do set strA=%%i& set strB=%%j
set str1=!strA!&set num=!num:.=!&set /a LN=LF=0
:len1
set /a LN+=1&set str1=!str1:~0,-1!
if defined str1 goto len1
if defined strB (
set str2=!strB!
:len2
set /a LF+=1& set str2=!str2:~0,-1!
if defined str2 goto len2
)
set /a var1=LN%%3,var2=LF%%3,begin=1
if !var1!==1 (set Snum1=!num:~0,1!&set num=!num:~1!&set /a LN+=begin=2) else if !var1!==2 set Snum1=!num:~0,2!&set num=!num:~2!&set /a LN+=1,begin=2
if !var2!==1 (set num=!num!00& set /a LF+=2) else if !var2!==2 set num=!num!0& set /a LF+=1
set /a Linteger=LN/3&set /a Lroot=Linteger+degree&set /a Lr=Lroot-1
for /l %%i in (1,1,!Lroot!) do set root%%i=0
set /a C=^(LN+LF^)/3,cou=1,first=9
for /l %%i in (!begin!,1,!C!) do for %%j in (100,10,1) do set /a Snum%%i+=!num:~0,1!*%%j&set num=!num:~1!
for %%i in (729,512,343,216,125,64,27,8,1,0) do (
if %%i leq !Snum1! set /a var=%%i&goto :break
set /a first-=1
)
:break
set /a root1=first,yushu1=Snum1-var,coun=2
set /p var=!root1!<nul
if !C! gtr 1 (set /a yushu2=Snum2,C-=2) else set /a yushu2=0&set /a C-=1
:sqrt
set /a Lcoutem=cou%%3
if !Lcoutem!==2 (
set /a Loopmin=cou+1
for /l %%i in (1,1,!cou!) do set /a roottem%%i=root%%i
set /a roottem!Loopmin!=0
) else if !Lcoutem!==1 (
set /a Loopmin=cou+2
for /l %%i in (!Loopmin!,-1,2) do set /a j=%%i-1&set /a roottem%%i=root!j!
set /a roottem1=0
) else (
set /a Loopmin=cou
+3
for /l %%i in (!Loopmin!,-1,3) do set /a j=%%i-2&set /a roottem%%i=root!j!
set /a roottem1=roottem2=0
)
set /a count=Loopmin/3,x=9
for /l %%i in (1,1,!count!) do (
set /a var3=%%i*3,var2=%%i*3-1,var1=%%i*3-2
set /a Sumtem1%%i=roottem!var1!*100
set /a Sumtem1%%i+=roottem!var2!*10
set /a Sumtem1%%i+=roottem!var3!
set /a Sumtem2%%i=Sumtem1%%i
)
:loop
for /l %%i in (1,1,!count!) do set /a Sumtt1%%i=Sumtem1%%i,Sumtt2%%i=Sumtem2%%i
set /a Sumtt2!count!+=x,abc=count*2+1
for /l %%i in (1,1,!count!) do set /a Sumtt2%%i=Sumtt2%%i*3*x
for /l %%i in (1,1,!abc!) do set /a Sum%%i=0
for /l %%i in (1,1,!count!) do for /l %%j in (1,1,!count!) do set /a k=%%i+%%j-1&set /a Sum!k!+=Sumtt1%%i*Sumtt2%%j
set /a Sum!k!+=x*x*x,zhong=k+1&set /a jin=Sum!zhong!=0
for /l %%i in (!zhong!,-1,2) do set /a kk=%%i-1&set /a Sum%%i=^(Sum!kk!+jin^)%%1000&set /a jin=^(Sum!kk!+jin^)/1000
set /a Sum1=jin
if !jin! geq 1000 set /a Sum0=jin/1000,Sum1=jin%%1000,zhong+=1&for /l %%i in (!zhong!,-1,1) do set /a j=%%i-1&set /a Sum%%i=Sum!j!
set /a f=zhong+1
for /l %%i in (!coun!,-1,1) do (
set /a f-=1&set /a Sum%%i=Sum!f!
if !f! leq 0 set /a Sum%%i=0
)
for /l %%i in (1,1,!coun!) do (
if !yushu%%i! gtr !Sum%%i! goto :next
if !yushu%%i! lss !Sum%%i! set /a x-=1&goto :loop
)
:next
set /a cou+=1&set /a root!cou!=x,Linteger-=1
if !Linteger!==0 if !degree!==0 goto :end
if !Linteger!==0 set /p var=.<nul
set /p var=!x!<nul
for /l %%i in (!coun!,-1,1) do (
set /a yushu%%i-=Sum%%i
if !yushu%%i! lss 0 set /a j=%%i-1&set /a yushu%%i+=1000,yushu!j!-=1
)
set /a coun+=1
if !C! gtr 0 (set /a yushu!coun!=Snum!coun!) else set /a yushu!coun!=0
set /a C-=1,Lr-=1
if !Lr! gtr 0 goto :sqrt
:end
echo.&echo.&echo 计算完毕
pause
echo 正在返回主页面
ping -n 2 127.0.0.1>nul
goto one
exit