【已解决】请教“关于输入一个四位以内的整数的困惑”
本帖最后由 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: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) 先请教一下我的代码为什么输入少于四位数的整数时不显示正确答案呢,如果更简单的写法也请麻烦告诉我下。 回复 2# 水木子
你有高招就发出来呗!我加分!
{:face (301):} 请教简单写法 本帖最后由 水木子 于 2010-8-7 16:59 编辑
回复 5# chuyun126
2楼有代码啊! 回复 5# chuyun126
水大侠已经发出来了!看看吧! 我也来一个#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) 这样也不错啊,算简化了哈。谢谢 貌似没有限制小数点的介入 回复 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: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 这个是《Let's AutoIt》代码哈,我也看过
页:
[1]