标题: [数值计算] [已解决]批处理按位计算5位数的和并显示结果的个位数字 [打印本页]
作者: jialin2008 时间: 2010-7-13 20:58 标题: [已解决]批处理按位计算5位数的和并显示结果的个位数字
我要在里面输入5个数字 就是58048 然后得出5+8+0+4+8=25 省略十位 只显示个位 5
然后计算后三位048(百个十位)
需要他得出 :0在下面等于0 (对应下面的百位), 4在下面等于1(对应下面的十位),8等于下面2(对应下面的个位),也就是先用后三位的对应值计算一次,然后在和后三位的本身值相加,就象这样:对应值 百位0的对应值=0,十位4的对应值=1个位8的对应值=2 那么就是等于0+1+2,在和后三位的本身值相加:0+1+2+0+4+8=15
省略掉十位只保留个位数字 ,也就是只显示5
两个结合起来应该显示结果为 5 5
下面是百十个为的对应值:
百位:
01234=0
56789=1
十位:
0369=0 147=1
258=2
个位
0123=0 456=1 789=2
再加一个需要实现的结果:就是百位和十位加一种新的对应值:
比如十位和百位是1和0,或者0和1就让他等于下面的对应值2!其他的一样道理比如百位是8十位是9按照下面的对应值应该等于7,十位和百位的数字反过来也是一样,意思就是无论是89还是98都等于7!不知大家能看明白不能!
让他百十结果为:x
01=2 02=1 03=4 04=3 05=6 06=5 07=8 08=7 09=4
12=0 13=2 14=7 15=9 16=8 17=4 18=6 19=5
23=1 24=9 25=8 26=7 27=6 28=5 29=4
34=0 35=7 36=9 37=5 38=4 39=6
45=6 46=5 47=1 48=3 49=0
56=0 57=3 58=2 59=1
67=2 68=1 69=3
78=0 79=8
89=7
[ 本帖最后由 jialin2008 于 2010-7-19 21:22 编辑 ]
作者: sgaizxt001 时间: 2010-7-13 21:05
非常迷糊,我给你指点一下,让一串数字表示成一个字符串,set str=1234,然后用字符串截取字符的办法相加,比如set /a %str:~0,1%+%str:~1,1%,效果就是1+2
作者: neorobin 时间: 2010-7-14 12:05
- @echo off
- setlocal enableDelayedExpansion
- call :initRule
- echo 后三位数字转换规则:& set #
- set /p num=请输入:
-
- call :calcSum num sum
- echo =!sum!
- echo 总和的个位: !sum:~-1!
- call :specSum num sum
-
- set /p=!sum!<NUL
- for /l %%i in (3 -1 1) do (
- set /p=+!num:~-%%i,1!<NUL
- set /a sum+=!num:~-%%i,1!
- )
- echo =!sum!
- echo 最后的结果个位: !sum:~-1!
- pause
- exit /b
-
- :specSum num sum
- echo 后三位总和特别计算:
- set "%2=0"
- for /l %%i in (3 -1 1) do (
- for /f "tokens=2 delims==" %%m in ('"set #_%%i_!%1:~-%%i,1!"') do (
- echo !%1:~-%%i,1!==^>%%m
- set /a %2+= %%m
- )
- )
- set %2
- exit /b
-
- :initRule 初始化特别规则, 百,十,个位的转换规则
- for /l %%a in (0 1 9) do (
- set /a "#_3_%%a=%%a / 5, #_2_%%a= %%a %% 3, #_1_%%a= (%%a-1) / 3"
- )
- exit /b
-
- :calcSum num sum 对数字 num 的每一位进行总和计算,结果由 sum 返回
- set "%2=0"
- for /l %%a in (0 1 1000) do (
- if "!%1:~%%a,1!" neq "" (
- set /a %2+=!%1:~%%a,1!
- set /p=+!%1:~%%a,1!<NUL
- ) else exit /b
- )
- exit /b
复制代码
作者: pgfj18 时间: 2010-7-14 13:51 标题: 回复 1楼 的帖子
@echo off
set /p a=输入一个5位数:
for /l %%i in (0 1 4) do call set /a a%%i=%%a:~%%i,1%%,o=o+a%%i
set /a p=a2+a3+a4
echo 01234|findstr "%a2%">nul&&set a2=0||set a2=1
echo 0369|findstr "%a3%">nul&&set a3=0||echo 147|findstr "%a3%">nul&&set a3=1||set a3=2
echo 0123|findstr "%a4%">nul&&set a4=0||echo 456|findstr "%a4%">nul&&set a4=1||set a4=2
set /a p=a2+a3+a4+p
echo 得出的结果为:%o:~-1%%p:~-1%
pause>nul
作者: qwd 时间: 2010-7-14 15:55 标题: 运用一元运算符! 回1楼
@echo off&setlocal enabledelayedexpansion
set x=12345
set/p x=输入5位数:
for /l %%i in (0 1 4) do (
set/a n=!x:~%%i,1!,w+=n,b+="^!(1-%%i)*(-w)+%%i/4*w"
set/a a+="(^!(2-%%i)*(n/5)+^!(3-%%i)*(n%%3)+%%i/4*(n-1)/3)%%(28-%%i/4*18)"
)
set/a s=(a+b)%%10,w%%=10
echo 5位数结果是!w!,后三位结果是!s!
pause
作者: pgfj18 时间: 2010-7-14 16:03
@echo off&set /p a=输入一个5位数:
for /l %%i in (0 1 4) do call set /a a%%i=%%a:~%%i,1%%,o+=a%%i
set /a a=a2+a3+a4+a2/5+a3%%3+(a4-1)/3
echo.得出的结果为:%o:~-1%%a:~-1%
pause>nul&cls&set /a o=0,a=0&%0
作者: qwd 时间: 2010-7-14 16:03 标题: 补充一下1楼贴子
目标1:求一个5位数的各位上数的和,再取这个和的个位数。
目标2:求5位数后三位对应数的和的个位,再加后三位数的和,再取个位数
后三位对应关系如下:
百位上的数如下对应关系:
0,1,2,3,4 对应 0
5,6,7,8,9 对应 1 既 h/4
十位对应数:
0,3,6,9,对应0
1,4,7 对应1
2,5,8 对应2 既d%%3
个位对应数:
0,1,2,3 对应 0
4,5,6 对应 1
7,8,9 对应 2 既(n-1)/3
目标2 分5步
1。后三位取对应数
2。对应数各位之和
3。和的个位数
4。第3步的个位数 加原三位数各位 既4个数相加得到的和
5。取第4步和的个位数
[ 本帖最后由 qwd 于 2010-7-14 16:13 编辑 ]
作者: pgfj18 时间: 2010-7-14 16:25
@echo off&set /p a=输入一个5位数:
set/a a=%a:~,1%+%a:~1,1%+%a:~2,1%+%a:~3,1%+%a:~4,1%,b=%a:~2,1%+%a:~3,1%+%a:~4,1%+%a:~2,1%/5+%a:~3,1%%%3+(%a:~4,1%-1)/3
echo.得出的结果为:%a:~-1%%b:~-1%&pause>nul&cls&%0
[ 本帖最后由 pgfj18 于 2010-7-14 16:31 编辑 ]
作者: pgfj18 时间: 2010-7-14 16:55 标题: 回复 1楼 的帖子
@echo off&set /p a=输入一个5位数:&call set/a a=%%a:~,1%%+%%a:~1,1%%+%%a:~2,1%%+%%a:~3,1%%+%%a:~4,1%%,b=%%a:~2,1%%+%%a:~3,1%%+%%a:~4,1%%+%%a:~2,1%%/5+%%a:~3,1%%%%%%3+(%%a:~4,1%%-1)/3&call echo.得出的结果为:%%a:~-1%%%%b:~-1%%&pause>nul&cls&%0
作者: namejm 时间: 2010-7-14 20:57
做了个简单的出错检测:- @echo off
- setlocal enabledelayedexpansion
-
- :Main
- cls
- set num=
- set /p num=请输入一个5位数字(退出直接按回车):
- if not defined num exit
- if "%num:~4%"=="" goto Main
- if not "%num:~5%"=="" goto Main
- set /a sum=%num%+0 2>nul
- if %sum% neq %num% goto Main
-
- set sum=0
- for /l %%i in (0,1,4) do set num%%i=!num:~%%i,1!
- for /l %%i in (0,1,4) do set /a sum+=!num%%i!
- echo %sum:~-1%
-
- set /a sum=%num2%+%num3%+%num4%
- if %num2% leq 4 (set num2=0) else set num2=1
- set /a mod=%num3%%%3
- set num3=%mod%
- if %num4% leq 3 (
- set num4=0
- ) else (
- if %num4% leq 6 (
- set num4=1
- ) else set num4=2
- )
- set /a sum=%sum%+%num2%+%num3%+%num4%
- echo %sum:~-1%
- pause
-
- goto Main
复制代码
另外,有新的要求请更新在顶楼,方便后来的人看帖子。
作者: pgfj18 时间: 2010-7-16 13:08
@echo off&set /p a=输入一个5位数:&call set c=%%a%%&call set/a a=%%a:~,1%%+%%a:~1,1%%+%%a:~2,1%%+%%a:~3,1%%+%%a:~4,1%%,b=%%a:~2,1%%+%%a:~3,1%%+%%a:~4,1%%+%%a:~2,1%%/5+%%a:~3,1%%%%%%3+(%%a:~4,1%%-1)/3&call set /a d=%%a:~-1%%-%%b:~-1%%&call echo.结果一: %%a:~-1%%&call echo.结果二: %%b:~-1%%&call echo.差值是: %%d%%&call set c=%%c:~2,2%%
if "%c:0=%" == "1" (set c=2&goto :pgfj) else (
if "%c:0=%" == "2" (set c=1&goto :pgfj) else (
if "%c:0=%" == "3" (set c=4&goto :pgfj) else (
if "%c:0=%" == "3" (set c=4&goto :pgfj) else (
if "%c:0=%" == "3" (set c=4&goto :pgfj) else (
if "%c:0=%" == "4" (set c=3&goto :pgfj) else (
if "%c:0=%" == "5" (set c=6&goto :pgfj) else (
if "%c:0=%" == "6" (set c=5&goto :pgfj) else (
if "%c:0=%" == "7" (set c=8&goto :pgfj) else (
if "%c:0=%" == "8" (set c=7&goto :pgfj) else (
if "%c:0=%" == "9" set c=4&goto :pgfj))))))))))
if "%c:1=%" == "2" (set c=0&goto :pgfj) else (
if "%c:1=%" == "3" (set c=2&goto :pgfj) else (
if "%c:1=%" == "4" (set c=7&goto :pgfj) else (
if "%c:1=%" == "5" (set c=9&goto :pgfj) else (
if "%c:1=%" == "6" (set c=8&goto :pgfj) else (
if "%c:1=%" == "7" (set c=4&goto :pgfj) else (
if "%c:1=%" == "8" (set c=6&goto :pgfj) else (
if "%c:1=%" == "9" set c=5&goto :pgfj)))))))
if "%c:2=%" == "3" (set c=1&goto :pgfj) else (
if "%c:2=%" == "4" (set c=9&goto :pgfj) else (
if "%c:2=%" == "5" (set c=8&goto :pgfj) else (
if "%c:2=%" == "6" (set c=7&goto :pgfj) else (
if "%c:2=%" == "7" (set c=6&goto :pgfj) else (
if "%c:2=%" == "8" (set c=5&goto :pgfj) else (
if "%c:2=%" == "9" set c=4&goto :pgfj))))))
if "%c:3=%" == "4" (set c=0&goto :pgfj) else (
if "%c:3=%" == "5" (set c=7&goto :pgfj) else (
if "%c:3=%" == "6" (set c=9&goto :pgfj) else (
if "%c:3=%" == "7" (set c=5&goto :pgfj) else (
if "%c:3=%" == "8" (set c=4&goto :pgfj) else (
if "%c:3=%" == "9" set c=6&goto :pgfj)))))
if "%c:4=%" == "5" (set c=6&goto :pgfj) else (
if "%c:4=%" == "6" (set c=5&goto :pgfj) else (
if "%c:4=%" == "7" (set c=1&goto :pgfj) else (
if "%c:4=%" == "8" (set c=3&goto :pgfj) else (
if "%c:4=%" == "9" set c=0&goto :pgfj))))
if "%c:5=%" == "6" (set c=5&goto :pgfj) else (
if "%c:5=%" == "7" (set c=3&goto :pgfj) else (
if "%c:5=%" == "8" (set c=2&goto :pgfj) else (
if "%c:5=%" == "9" set c=1&goto :pgfj)))
if "%c:6=%" == "7" (set c=2&goto :pgfj) else (
if "%c:6=%" == "8" (set c=1&goto :pgfj) else (
if "%c:6=%" == "9" set c=3&goto :pgfj))
if "%c:7=%" == "8" (set c=0&goto :pgfj) else (
if "%c:7=%" == "9" set c=8&goto :pgfj)
if "%c:8=%" == "9" (set c=7)
:pgfj
echo 百十位: %c%&pause>nul&cls&%0
[ 本帖最后由 pgfj18 于 2010-7-16 15:21 编辑 ]
作者: namejm 时间: 2010-7-17 07:54
把10楼的代码修改一下,再加上个配置文件config.txt就可以了:- @echo off
- setlocal enabledelayedexpansion
-
- :Main
- cls
- set num=
- set /p num=请输入一个5位数字(退出直接按回车):
- if not defined num exit
- if "%num:~4%"=="" goto Main
- if not "%num:~5%"=="" goto Main
- set /a sum=%num%+0 2>nul
- if %sum% neq %num% goto Main
-
- set sum=0
- for /l %%i in (0,1,4) do set num%%i=!num:~%%i,1!
- for /l %%i in (0,1,4) do set /a sum+=!num%%i!
- <nul set /p=结果是:%sum:~-1%
-
- set /a sum=%num2%+%num3%+%num4%
- if %num2% leq 4 (set num_2=0) else set num_2=1
- set /a mod=%num3%%%3
- set num_3=%mod%
- if %num4% leq 3 (
- set num_4=0
- ) else (
- if %num4% leq 6 (
- set num_4=1
- ) else set num_4=2
- )
- set /a sum=%sum%+%num_2%+%num_3%+%num_4%
- <nul set /p=%sum:~-1%
-
- for /f "tokens=2 delims==" %%i in ('findstr "[%num2%%num3%][%num2%%num3%]=" config.txt') do echo %%i
- pause
-
- goto Main
复制代码
config.txt内容如下,必须与上面的批处理放在同一目录下使用:
01=2
02=1
03=4
04=3
05=6
06=5
07=8
08=7
09=4
12=0
13=2
14=7
15=9
16=8
17=4
18=6
19=5
23=1
24=9
25=8
26=7
27=6
28=5
29=4
34=0
35=7
36=9
37=5
38=4
39=6
45=6
46=5
47=1
48=3
49=0
56=0
57=3
58=2
59=1
67=2
68=1
69=3
78=0
79=8
89=7
另外,有个疑问:怎么形如11、22、33……99之类百位和十位相同的情形没有写进来呢?
作者: pgfj18 时间: 2010-7-17 09:39 标题: 还是findstr好用
- @echo off&set /p a=输入一个5位数:&call set c=%%a%%&call set/a a=%%a:~,1%%+%%a:~1,1%%+%%a:~2,1%%+%%a:~3,1%%+%%a:~4,1%%,b=%%a:~2,1%%+%%a:~3,1%%+%%a:~4,1%%+%%a:~2,1%%/5+%%a:~3,1%%%%%%3+(%%a:~4,1%%-1)/3&call set /a d=%%a:~-1%%-%%b:~-1%%&call echo.结果一: %%a:~-1%%&call echo.结果二: %%b:~-1%%&call echo.差值是: %%d%%&call set c=%%c:~2,2%%
- (for /f "tokens=2 delims==" %%i in ('findstr "^%c%=.$ ^%c:~1%%c:~,1%=.$" %0') do echo 百十位: %%i)||echo 百十位:%c%没有定义&pause>nul&cls&%0
- 01=2
- 02=1
- 03=4
- 04=3
- 05=6
- 06=5
- 07=8
- 08=7
- 09=4
- 12=0
- 13=2
- 14=7
- 15=9
- 16=8
- 17=4
- 18=6
- 19=5
- 23=1
- 24=9
- 25=8
- 26=7
- 27=6
- 28=5
- 29=4
- 34=0
- 35=7
- 36=9
- 37=5
- 38=4
- 39=6
- 45=6
- 46=5
- 47=1
- 48=3
- 49=0
- 56=0
- 57=3
- 58=2
- 59=1
- 67=2
- 68=1
- 69=3
- 78=0
- 79=8
- 89=7
-
复制代码
注意:代码最后是一行空行,如果没有的话最后的"89"或"98" findstr 找不到
[ 本帖最后由 pgfj18 于 2010-7-17 09:59 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |