中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]******找最大公约数******
作者:
标题: [原创]******找最大公约数****** 上一主题 | 下一主题
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『楼 主』:  [原创]******找最大公约数******


@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


2007-9-21 11:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 2 楼』:  

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 ]

2007-9-21 13:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: