|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-10-11 04:17 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
62 楼』:
关于qwe1234567版主提出的几点问题, 都属于错误输入的范筹, 而脚本的运算是绝对没有任何问题的...
由于时间的关系对错误输入的检测稍候再改进~~~!
|
|
2006-10-11 08:24 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-10-11 08:56 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-10-11 08:58 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
65 楼』:
sorry 我指的是输入两个小数点的情况.
由于时间关系没来得及测试, 你说的问题已经解决, 代码更新在47楼...
|
|
2006-10-11 09:13 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-10-11 09:37 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
67 楼』:
嗯,你代码中的变量名都用简单的j0, jq1等, 并且复合语句都写在一行.
而我写的变量名都用一些英文单词, 并且所有的复合语句每一句命令都另起一行再在前面空两格(已经习惯了, 代码更好看些). 不太喜欢用管道命令把命令拼接起来. 这样产生大量的空格, 英语单词虽然使用得不好, 但也是为了见名知意.
[ Last edited by pengfei on 2006-10-11 at 09:57 ]
|
|
2006-10-11 09:46 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
|
2006-10-12 08:30 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-10-12 21:35 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
『第
70 楼』:
昨天想了一个晚上想到的也就是补位等,下回去代码好好看看
|
|
2006-10-13 01:38 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
71 楼』:
如果使用中国珠算的进位原理,估计算乘、除的任意位数都没有问题了~:)
此帖被 +2 点积分 点击查看详情 评分人:【 jvive 】 | 分数: +2 | 时间:2008-4-3 11:29 |
|
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-10-13 02:42 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
72 楼』:
因为CMD功能有限,做除法运算的时候,对整数除法结果的小数部分直接做丢弃处理,并且不能处理小数除法,所以,用CMD来做除法运算应该慎之又慎。
按位做乘法运算的方法是行得通的,实际上加法运算就已经包含了乘法运算的部分功能,各位有兴趣的话,可以在加法代码的基础上扩充一下。
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-10-13 06:49 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
『第
73 楼』:
Quote: | Originally posted by namejm at 2006-10-13 06:49:
因为CMD功能有限,做除法运算的时候,对整数除法结果的小数部分直接做丢弃处理,并且不能处理小数除法,所以,用CMD来做除法运算应该慎之叠... |
|
原理上是可以行的通的,这几天家停电,等几天发个1000个以内数的加和10个数以内的乘,呵呵,基本的东西已经构思好了
|
|
2006-10-13 08:02 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
74 楼』:
实现乘法运算完全可行, 前几天我已经完成了最简单的乘法运算脚本, 但如果运算位数大时就代码就比较复杂了.
由于其他的的原因一直没有进一步修改, 有时间一定好好写一段...
|
|
2006-10-13 08:16 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
75 楼』:
昨天晚上加班改进了乘法运算脚本, 可以运算整数和浮点数, 通用各种情况. 因为牵涉到大量的取位运算, 所以效率不是很高, 有时间再好好优化一下.
欢迎大家测试...
@echo off
if not %1*==* set M=%1 & set N=%2 & goto jmp
:input
cls
set M=
set N=
set /p M= input primary number [X]:
set /p N=input number two number [Y]:
:jmp
set sign=
if "%M:~0,1%"=="-" (
if "%N:~0,1%"=="-" (
set M=%M:~1%
set N=%N:~1%
goto begin
)
)
if "%M:~0,1%"=="-" (
set M=%M:~1%
set sign=-
goto begin
)
if "%N:~0,1%"=="-" (
set N=%N:~1%
set sign=-
)
:begin
echo %M% | find "." >nul || set M=%M%.0
echo %N% | find "." >nul || set N=%N%.0
if "%M:~-1%"=="." set M=%M%0
if "%N:~-1%"=="." set N=%N%0
if "%M:~0,1%"=="." set M=0%M%
if "%N:~0,1%"=="." set N=0%N%
call :jerque "%M%"
call :jerque "%N%"
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=." %%i in ("%M%") do (
set X=%%i
set X_=%%j
)
for /f "tokens=1,2 delims=." %%i in ("%N%") do (
set Y=%%i
set Y_=%%j
)
call :front %X%
set X=%front_%
call :front %Y%
set Y=%front_%
call :rear %X_%
set X_=%rear_%
call :rear %Y_%
set Y_=%rear_%
call :count %X_%
set jlxs=%count_%
call :count %Y_%
set /a jlxs=%count_%+%jlxs%
set son=@%Y%%Y_%
set result=0
set append=
:boss
if not "%son:~-1%"=="@" (
set xx=!son:~-1!
set son=!son:~0,-1!
call :under
call :plus
set result=!ll!
set append=0!append!
goto boss
)
if "%jlxs%"=="0" goto end
set result=!result:~0,-%jlxs%!.!result:~-%jlxs%!
call :rear %result%
set result=%rear_%
if "%result:~-1%"=="." set result=%result:~0,-1%
if "%result:~0,1%"=="." set result=0%result%
:end
cls
echo ============
echo 运算结果^^^!
echo ============
echo.
echo.
echo %M%*%N%=%sign%%result%
pause >nul
exit
:plus
set weave=%single:~0,-1%%weave:~0,-1%
call :count %weave%%append%
set num1=%count_%
call :count %result%
set num2=%count_%
set /a num=%num1%-%num2%
call :join %num% %result%
set result=%join_%
set lx=@%weave%%append%
set ly=@%result%
set ln=0
set ll=
:plus_
set /a lz=%lx:~-1%+%ly:~-1%+%ln%
set/a ln=0%lz:~0,-1%
set ll=%lz:~-1%%ll%
set lx=%lx:~0,-1%
set ly=%ly:~0,-1%
if "%lx%"=="@" (
if "%ln%"=="1" (
set ll=1%ll%
goto :eof
) else (
goto :eof
)
)
goto plus_
:under
set father=@%X%%X_%
set single=0
set weave=
:under_
set note=%single:~0,-1%
if "%note%"=="" set note=0
set weave=%single:~-1%%weave%
if not "%father:~-1%"=="@" (
set yy=!father:~-1!
set /a yy=!yy!
set father=!father:~0,-1!
call :op
)
goto :eof
:op
set part=!xx!
set part_=!yy!
set /a single=%part%*%part_%+!note!
goto under_
:front
set front_=%1
:front1
if "%front_:~0,1%"=="0" (
set front_=%front_:~1%
goto front1
)
goto :eof
:rear
set rear_=%1
:rear1
if "!rear_:~-1!"=="0" (
set rear_=!rear_:~0,-1!
goto rear1
)
goto :eof
:count
set count2=%1@
set count_=0
:count1
if not "!count2:~0,1!"=="@" (
set /a count_+=1
set count2=!count2:~1!
goto count1
)
goto :eof
:join
set margin=%1
set join_=%2
:join1
if not "%margin%"=="0" (
set /a margin-=1
set join_=0!join_!
goto join1
)
goto :eof
:jerque
for /f "tokens=1* delims=." %%i in (%1) do (
echo %%i%%j|findstr "^[0-9]*$">nul || goto error
)
goto :eof
:error
cls
echo ======================
echo 运算数不符合要求^^!
echo ======================
echo.
echo.
echo 请按任意键重新输入...
pause >nul
goto input [ Last edited by pengfei on 2006-10-15 at 09:35 ]
附件
1: 无限制乘法运算脚本.rar (2006-10-14 09:00, 1.25 K, 下载附件所需积分 1 点
,下载次数: 20)
|
|
2006-10-13 23:38 |
|