Board logo

标题: [数值计算] [已解决]批处理按位计算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

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. call :initRule
  4. echo 后三位数字转换规则:& set #
  5. set /p num=请输入:
  6. call :calcSum num sum
  7. echo =!sum!
  8. echo 总和的个位: !sum:~-1!
  9. call :specSum num sum
  10. set /p=!sum!<NUL
  11. for /l %%i in (3 -1 1) do (
  12. set /p=+!num:~-%%i,1!<NUL
  13. set /a sum+=!num:~-%%i,1!
  14. )
  15. echo =!sum!
  16. echo 最后的结果个位: !sum:~-1!
  17. pause
  18. exit /b
  19. :specSum num sum
  20. echo 后三位总和特别计算:
  21. set "%2=0"
  22. for /l %%i in (3 -1 1) do (
  23. for /f "tokens=2 delims==" %%m in ('"set #_%%i_!%1:~-%%i,1!"') do (
  24. echo !%1:~-%%i,1!==^>%%m
  25. set /a %2+= %%m
  26. )
  27. )
  28. set %2
  29. exit /b
  30. :initRule 初始化特别规则, 百,十,个位的转换规则
  31. for /l %%a in (0 1 9) do (
  32. set /a "#_3_%%a=%%a / 5, #_2_%%a= %%a %% 3, #_1_%%a= (%%a-1) / 3"
  33. )
  34. exit /b
  35. :calcSum num sum 对数字 num 的每一位进行总和计算,结果由 sum 返回
  36. set "%2=0"
  37. for /l %%a in (0 1 1000) do (
  38. if "!%1:~%%a,1!" neq "" (
  39. set /a %2+=!%1:~%%a,1!
  40. set /p=+!%1:~%%a,1!<NUL
  41. ) else exit /b
  42. )
  43. 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

  做了个简单的出错检测:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :Main
  4. cls
  5. set num=
  6. set /p num=请输入一个5位数字(退出直接按回车):
  7. if not defined num exit
  8. if "%num:~4%"=="" goto Main
  9. if not "%num:~5%"=="" goto Main
  10. set /a sum=%num%+0 2>nul
  11. if %sum% neq %num% goto Main
  12. set sum=0
  13. for /l %%i in (0,1,4) do set num%%i=!num:~%%i,1!
  14. for /l %%i in (0,1,4) do set /a sum+=!num%%i!
  15. echo %sum:~-1%
  16. set /a sum=%num2%+%num3%+%num4%
  17. if %num2% leq 4 (set num2=0) else set num2=1
  18. set /a mod=%num3%%%3
  19. set num3=%mod%
  20. if %num4% leq 3 (
  21.     set num4=0
  22. ) else (
  23.     if %num4% leq 6 (
  24.         set num4=1
  25.     ) else set num4=2
  26. )
  27. set /a sum=%sum%+%num2%+%num3%+%num4%
  28. echo %sum:~-1%
  29. pause
  30. 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就可以了:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :Main
  4. cls
  5. set num=
  6. set /p num=请输入一个5位数字(退出直接按回车):
  7. if not defined num exit
  8. if "%num:~4%"=="" goto Main
  9. if not "%num:~5%"=="" goto Main
  10. set /a sum=%num%+0 2>nul
  11. if %sum% neq %num% goto Main
  12. set sum=0
  13. for /l %%i in (0,1,4) do set num%%i=!num:~%%i,1!
  14. for /l %%i in (0,1,4) do set /a sum+=!num%%i!
  15. <nul set /p=结果是:%sum:~-1%
  16. set /a sum=%num2%+%num3%+%num4%
  17. if %num2% leq 4 (set num_2=0) else set num_2=1
  18. set /a mod=%num3%%%3
  19. set num_3=%mod%
  20. if %num4% leq 3 (
  21.     set num_4=0
  22. ) else (
  23.     if %num4% leq 6 (
  24.         set num_4=1
  25.     ) else set num_4=2
  26. )
  27. set /a sum=%sum%+%num_2%+%num_3%+%num_4%
  28. <nul set /p=%sum:~-1%
  29. for /f "tokens=2 delims==" %%i in ('findstr  "[%num2%%num3%][%num2%%num3%]=" config.txt') do echo %%i
  30. pause
  31. 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好用

  1. @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%%
  2. (for /f "tokens=2 delims==" %%i in ('findstr  "^%c%=.$ ^%c:~1%%c:~,1%=.$" %0') do echo 百十位: %%i)||echo 百十位:%c%没有定义&pause>nul&cls&%0
  3. 01=2
  4. 02=1
  5. 03=4
  6. 04=3
  7. 05=6
  8. 06=5
  9. 07=8
  10. 08=7
  11. 09=4
  12. 12=0
  13. 13=2
  14. 14=7
  15. 15=9
  16. 16=8
  17. 17=4
  18. 18=6
  19. 19=5
  20. 23=1
  21. 24=9
  22. 25=8
  23. 26=7
  24. 27=6
  25. 28=5
  26. 29=4
  27. 34=0
  28. 35=7
  29. 36=9
  30. 37=5
  31. 38=4
  32. 39=6
  33. 45=6
  34. 46=5
  35. 47=1
  36. 48=3
  37. 49=0
  38. 56=0
  39. 57=3
  40. 58=2
  41. 59=1
  42. 67=2
  43. 68=1
  44. 69=3
  45. 78=0
  46. 79=8
  47. 89=7
复制代码
注意:代码最后是一行空行,如果没有的话最后的"89"或"98" findstr 找不到

[ 本帖最后由 pgfj18 于 2010-7-17 09:59 编辑 ]




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2