| 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
『楼 主』:
 txt中有些相隔的数字,如何输入数字,获得数字相加
 
使用 LLM 解释/回答一下
  
文本中的内容是: 
2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100 
输入5个数字,如52559,则计算 第5位+ 第(5+2)位+ 第(5+2+5)位+ 第(5+2+5+5)位+ 第(5+2+5+5+9)位的结果
 
2 0 50000 50  0 20  4 1000 0 10 30  0 500 0 100 50000  2 0 1000 50 0 2 0 10 500  30 0 2 70 0 1000 100
 
 Last edited by tireless on 2008-1-7 at 04:34 AM ]  
 
    
 
  
 |   
 | 
  2008-1-6 20:05 | 
  
 | 
 | 
 
zh159 
金牌会员
 
      
 
  
 
积分 3687 
发帖 1467 
注册 2005-8-8 
状态 离线
 | 
『第 2 楼』:
 
 
使用 LLM 解释/回答一下
  
试试这个: 
(修正数据超出范围出错)
  
@echo off 
set "Test=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100" 
 
set/p input=input: 
 
call :loop _ %Test% 
echo ----- 
echo =%sss% 
pause 
exit 
 
:loop 
  set n=0 
:shiftloop 
  if "%1" == "" goto :eof 
  set/a n+=1 
  if %n% leq %input:~0,1% shift&&goto shiftloop 
  set/a sss=%sss%+%1 
  echo +%1 
  set "input=%input:~1%" 
  if not "%input%" == "" goto loop 
goto :eof 
 
 Last edited by zh159 on 2008-1-7 at 01:37 AM ]  
 
    
 
  
  |  
                  
  
                      |   
 | 
  2008-1-6 21:30 | 
  
 | 
 | 
 
junchen2 
高级用户
 
    
 
  
  
积分 537 
发帖 219 
注册 2007-8-4 来自 杭州--半山 
状态 离线
 | 
『第 3 楼』:
 
 
使用 LLM 解释/回答一下
  
echo off 
set /p data_sum=data_sum number  : 
awk -v fn=%data_sum% "{for(i=1;i<=length(fn);i++){sum+=substr(fn,i,1)};if(sum<=NF){for 
 
(i=1;i<=length(fn);i++){total+=$(fsum+=substr(fn,i,1))}} else {print \"warning:超过字段数, 
 
注意!\"}};END{print total}" 1.txt 
pause 
 
    
 
  
 |   
 | 
  2008-1-7 00:33 | 
  
 | 
 | 
 
terse 
银牌会员
 
     
 
  
  
积分 2404 
发帖 946 
注册 2005-9-8 
状态 离线
 | 
『第 4 楼』:
 
 
使用 LLM 解释/回答一下
  
@echo off 
set/p input=input: 
set "Test=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100" 
:loop 
set/a n=%input:~0,1% 
set "input=%input:~1%" 
for /f "tokens=%n%*" %%a in ("%Test%") do set/a sss+=%%a&&if not "%input%" =="" set test=%%b && goto loop  
echo %sss% 
pause 
 
刚发现 最后一个取不了 改过 
 
 Last edited by terse on 2008-1-7 at 01:38 AM ] 
 
    
 
  
  |  
                  
  
                    简单!简单!再简单! |   
 | 
  2008-1-7 00:58 | 
  
 | 
 | 
 
zh159 
金牌会员
 
      
 
  
 
积分 3687 
发帖 1467 
注册 2005-8-8 
状态 离线
 | 
『第 5 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by terse at 2008-1-7 00:58: 
@echo off 
set/p input=input: 
set "Test=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100" 
:loop 
set/a n=%input:~0,1% 
set "input=%input:~1%" 
for /f "tokens=%n%*" %%a in ("%Test%") do set/a sss+=%%a&&if not "%input%" =="" set test=%%b && goto loop  
echo %sss% 
pause 
 
刚发现 最后一个取不了 改过 
测试发现tokens=n单个最大只能达到31
 
 Last edited by zh159 on 2008-1-7 at 01:54 AM ]  
 
    
 
  
  |  
                  
  
                      |   
 | 
  2008-1-7 01:39 | 
  
 | 
 | 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
『第 6 楼』:
 
 
使用 LLM 解释/回答一下
  
谢谢楼上几位!2楼和4楼的都可用。 
 
再要求个小小的更改: 
1.显示出结果后,按任意键回到"input"而不是退出 
2.可否把结果用英文显示,每个数字空格分开。 
如结果为302,则显示为three zero two 
 
(汗,昨晚不小心碰了下插头重启后就不能联网,直到刚才狠心把杀软卸载了,竟神奇地可以上网了。。。) 
 
    
 
  
 |   
 | 
  2008-1-7 10:24 | 
  
 | 
 | 
 
zh159 
金牌会员
 
      
 
  
 
积分 3687 
发帖 1467 
注册 2005-8-8 
状态 离线
 | 
 | 
  2008-1-7 11:25 | 
  
 | 
 | 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
 | 
  2008-1-7 11:36 | 
  
 | 
 | 
 
terse 
银牌会员
 
     
 
  
  
积分 2404 
发帖 946 
注册 2005-9-8 
状态 离线
 | 
    『第 9 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by zh159 at 2008-1-7 01:39: 
 
测试发现tokens=n单个最大只能达到31 
 
 Last edited by zh159 on 2008-1-7 at 01:54 AM ]  
现在最大应该达不到31 最大9 
改一下zh159兄的
  
@echo off 
:start 
set sssE= 
set sss= 
set/p input=input: 
set "Test=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100" 
:loop 
set/a n=%input:~0,1% 
set "input=%input:~1%" 
for /f "tokens=%n%*" %%a in ("%Test%") do set/a sss+=%%a&& if not "%input%" =="" set test=%%b && goto loop 
if %sss% equ 10 echo ten&&goto start 
:Eloop 
set/a n=%sss:~0,1%+1 
set sss=%sss:~1% 
for /f "tokens=%n%" %%a in ("zero one two three four five six seven eight nine") do set ssse=%ssse% %%a&&if not "%sss%" == "" goto Eloop 
echo %ssse:~1% 
goto start 
 
 Last edited by terse on 2008-1-7 at 01:27 PM ]  
 
    
 
 
 
  
  |  
                  
  
                    简单!简单!再简单! |   
 | 
  2008-1-7 12:30 | 
  
 | 
 | 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
『第 10 楼』:
 
 
使用 LLM 解释/回答一下
  
多谢!达到了我想要的 
 
 Last edited by tireless on 2008-1-7 at 02:48 AM ] 
 
    
 
  
 |   
 | 
  2008-1-7 14:34 | 
  
 | 
 | 
 
everest79 
金牌会员
 
       一叶枝头,万树皆春
  
  
积分 2564 
发帖 1127 
注册 2006-12-25 
状态 离线
 | 
『第 11 楼』:
 
 
使用 LLM 解释/回答一下
  
 
 
for /l %%i in (1,1,45) do call set "aaa=%%aaa%%%%i " 
set /p in=input: 
set /a 1/(in/10000),1/(100000/in)||goto :eof 
set /a in1=%in:~0,1%,in2=in1+%in:~1,1%,in3=in2+%in:~2,1%,in4=in3+%in:~3,1%,in5=in4+%in:~4,1% 
for %%i in (%aaa%) do set /a num+=1,1/^(num-in1^),1/^(num-in2^),1/^(num-in3^),1/^(num-in4^),1/^(num-in5^)||call set "output=%%output%%%%i "&&set /a out+=%%i 
echo %out%=%output% 
pause 
 
这个能解决长度的问题吧  
 
    
 
  
 |   
 | 
  2008-1-7 15:17 | 
  
 | 
 | 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
 | 
  2008-1-7 15:42 | 
  
 | 
 | 
 
everest79 
金牌会员
 
       一叶枝头,万树皆春
  
  
积分 2564 
发帖 1127 
注册 2006-12-25 
状态 离线
 | 
 | 
  2008-1-7 15:59 | 
  
 | 
 | 
 
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
『第 14 楼』:
 
 
使用 LLM 解释/回答一下
  
额。反正不必担心这5个数相加会大于32,我输入的5个数相加都是在32以内的 
 
这样:如果5个数相加大于32就返回到input: 
 
    
 
  
 |   
 | 
  2008-1-7 16:22 | 
  
 | 
 | 
 
everest79 
金牌会员
 
       一叶枝头,万树皆春
  
  
积分 2564 
发帖 1127 
注册 2006-12-25 
状态 离线
 | 
 | 
  2008-1-7 16:41 | 
  
 |