中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-05 22:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]******找最大公约数****** 查看 610 回复 1
楼 主 [原创]******找最大公约数****** 发表于 2007-09-21 11:11 ·  中国 北京 电信
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线

@echo off
setlocal enabledelayedexpansion
::::::::::::::::::::::::::::Find The Biggest Public Divisor::::::::::::::::::::::::::::
:::::::::::::::::::::::::::: {s11ss 2007-9-21} ::::::::::::::::::::::::::::
:r
echo Please input two integers,like 9,21:
set /p n=
echo.
echo Calculating...
set /a i=1
for %%a in (!n!) do (
set n!i!=%%a
set /a i+=1
)
if !n1! equ !n2! (
call :e !n1!
goto :eof
)
if !n1! lss !n2! (
set t=!n1!
set n1=!n2!
set n2=!t!
)
set /a big=!n1!
set /a small=!n2!
:c
set /a remain=!big!%%!small!
if !remain! equ 1 (
echo.
echo They don't have the public divisor.
goto :e
)
if !remain! equ 0 (
echo.
echo The biggest public divisor is !small!.
goto :e
) else (
set big=!small!
set small=!remain!
goto :c
)
:e
echo.
echo Press Any Key To Exit...
pause>nul
2 发表于 2007-09-21 13:42 ·  中国 中电华通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
LZ的代码似乎有些长,发一段代码,支持求若干个数字之间的公约数

@echo off 2>nul 3>nul& setlocal enabledelayedexpansion
echo 请输入几个整数,类似:21 7 14
set /p n=
set num2=%n:* =%
for %%i in (%n%) do call :test %%i !num2!
echo 它们的公约数为:%num2%

pause>nul
:test %num1% %num2%
set /a temp=%1 %% %2
if %temp% NEQ 0 (
set/a num1=%2,num2=%temp%
call :test !num1! !num2!) else set num2=%2



[ Last edited by youxi01 on 2007-9-21 at 01:43 PM ]
论坛跳转: