chuyun126 发表于 2010-8-7 16:40:58

【已解决】请教“关于输入一个四位以内的整数的困惑”

本帖最后由 chuyun126 于 2010-8-10 09:47 编辑

输入一个四位以内的整数,要求1判断是几位数,要求2输入这个数的每一位,要求3反向重组并输出一个新数。下面是我写的代码:
Dim $Unit,$Ten,$Hundred,$Thousand,$Digit,$Num,$NewNum
$Num=InputBox("数字","请输入一个不大于4位数的整数")
If @error=1 Or $Num="" Then
        Exit
EndIf
Select
        Case $Num>=0 And $Num<10
               $Digit=1
               $Unit=Mod($Num,10)
               $NewNum=$Unit
        Case $Num>=10 And $Num<100
               $Digit=2
               $Unit=Mod($Num,10)
               $Ten=Mod(($Num-$Unit)/10,10)
               $NewNum=$Unit*10+$Ten
        Case $Num>=0 And $Num<10
               $Digit=3
               $Unit=Mod($Num,10)
               $Ten=Mod(($Num-$Unit)/10,10)
               $hundred=Mod(($Num-$Ten*10-$Unit)/100,10)
               $NewNum=$Unit*100+$Ten*10+$Hundred
        Case $Num>=1000 And $Num<10000
               $Digit=4
               $Unit=Mod($Num,10)
               $Ten=Mod(($Num-$Unit)/10,10)
               $hundred=Mod(($Num-$Ten*10-$Unit)/100,10)
               $Thousand=Mod(($Num-$Hundred*100-$Ten*10-$Unit)/1000,10)
               $NewNum=$Unit*1000+$Ten*100+$Hundred*10+$Thousand
       
EndSelect
MsgBox(0,"数字","这是一个"&$Digit&"位数,"&"个位上的数是"&$Unit&","&"十位上的数是"&$Ten&","&"百位上的数是"&$Hundred&","&"千位上的数字是"&$Thousand&","&"重组新数字是"&$NewNum&".")
请问一下,为什么只有输入刚好四位数才显示正确答案呢,输入少于四位的怎么不显示了啊

水木子 发表于 2010-8-7 16:44:49

本帖最后由 水木子 于 2010-8-7 16:58 编辑

用不着这么麻烦吧!#Include <String.au3>
Local $aDan = ['个位:', '十位:', '百位:', '千位:', '万位:']
Local $sText

$nNum = InputBox('数字', '请输入一个不大于4位数的整数')
$aReg = StringRegExp(_StringReverse($nNum), '\d', 3)

For $i = 0 To UBound($aReg) - 1
        $sText &= $aDan[$i] & $aReg[$i] & ''
Next
MsgBox(0, _StringReverse($nNum), $sText)

chuyun126 发表于 2010-8-7 16:46:54

先请教一下我的代码为什么输入少于四位数的整数时不显示正确答案呢,如果更简单的写法也请麻烦告诉我下。

hzxymkb 发表于 2010-8-7 16:48:24

回复 2# 水木子
你有高招就发出来呗!我加分!
{:face (301):}

chuyun126 发表于 2010-8-7 16:52:16

请教简单写法

水木子 发表于 2010-8-7 16:57:17

本帖最后由 水木子 于 2010-8-7 16:59 编辑

回复 5# chuyun126
2楼有代码啊!

hzxymkb 发表于 2010-8-7 16:59:59

回复 5# chuyun126
水大侠已经发出来了!看看吧!

风行者 发表于 2010-8-7 17:15:00

我也来一个#Include <String.au3>
#include <Array.au3>
$Num=InputBox("数字","请输入一个不大于4位数的整数",""," M4") ;M4限制只能输入4个数字
If @error <> 0 Then Exit
$len = StringLen($Num) ;位数
Dim $array[$len + 1]
$array = $len
For $i = 1 To $len
        $array[$i] = StringMid($Num,$i,1)
Next
_ArrayAdd($array,_StringReverse($Num))
_ArrayDisplay($array)

chuyun126 发表于 2010-8-7 17:18:47

这样也不错啊,算简化了哈。谢谢

afan 发表于 2010-8-7 20:29:46

貌似没有限制小数点的介入

3mile 发表于 2010-8-7 22:37:39

回复 4# hzxymkb
嘿嘿,我也骗点分。#Include <String.au3>
Local $aDan = ['个位:', '十位:', '百位:', '千位:', '万位:']
Local $sText
$nNum = Execute(InputBox('数字', '请输入一个不大于4位数的整数'))
If IsFloat($nNum) Then
        MsgBox(0,0,"小数不考虑")
        Exit
EndIf

If $nNum>9999 Or $nNum<0 Then
        MsgBox(0,0,"大于四位数,负数不计算")
        Exit
EndIf
$len=StringLen($nNum)
$n=1
For $i=$len-1 To 0 Step -1
        $sText&=$aDan[$i]&StringMid($nNum,$n,1)&"   "
        $n+=1
Next
MsgBox(0,$nNum,$sText&"反序后:"&_StringReverse($nNum))

netegg 发表于 2010-8-9 05:36:37

本帖最后由 netegg 于 2010-8-9 05:44 编辑

#include<array.au3>
local $input
$array = StringRegExp($input, '\S', 3)
_ArraySearch($array, '.')
If Not (UBound($array) > 4 Or @error) Then
   _ArrayReverse($array)
   MsgBox('','',_ArrayToString($array, ""))
EndIf

小菜kks 发表于 2010-8-10 12:43:24

这个是《Let's AutoIt》代码哈,我也看过
页: [1]
查看完整版本: 【已解决】请教“关于输入一个四位以内的整数的困惑”