我正在尝试制作一个采用三位数的数字并将其取反的函数(543变成345)我无法从TextBox中获取该值,因为我需要它使用三个数字技巧来找到一个值。
RVal = ReverseDigits(Val)
Diff = Val - RVal
RDiff = ReverseDigits(Diff)
OVal = Diff + RDiff
543-345 = 198198 + 891 = 1089
然后将1089放入文本框
Function ReverseDigits(ByVal Value As Integer) As Integer
' Take input as abc
' Output is (c * 100 + b * 10 + a) = cba
Dim ReturnValue As Boolean = True
Dim Val As String = CStr(InputTextBox.Text)
Dim a As Char = Val(0)
Dim b As Char = Val(1)
Dim c As Char = Val(2)
Value = (c * 100) + (b * 10) + (a)
Return ReturnValue
End Function
我已经尝试过了,但是不知道为什么它不起作用。
您可以将整数转换为字符串,将字符串取反,然后转换回整数。您可能要强制执行三位数的要求。您可以在尝试转换之前验证参数
Public Function ReverseDigits(value As Integer) As Integer
If Not (value > 99 AndAlso value < 1000) Then Throw New ArgumentException("value")
Return Integer.Parse(New String(value.ToString().Reverse().ToArray()))
End Function
我的代码非常简单,并且假设您删除了该验证,那么它也适用于没有三位数字的数字。要查看您的代码出了什么问题,有两件事。请参阅我更改的注释行。主要问题是使用Val
作为变量名,然后尝试像Val(0)
那样索引字符串。 Val
是vb.net的内置函数,编译器可以将Val(0)
解释为函数,而不是为字符串编制索引。
Function ReverseDigits(ByVal Value As Integer) As Integer
' Dim ReturnValue As Boolean = True
' Dim Val As String = CStr(InputTextBox.Text)
Dim s As String = CStr(Value)
Dim a As Char = s(0)
Dim b As Char = s(1)
Dim c As Char = s(2)
Value = Val(c) * 100 + Val(b) * 10 + Val(a)
'Return ReturnValue
Return Value
End Function
Public Function ReverseDigits(Value As Integer) As Integer
Dim s = CStr(Value)
Return 100 * Val(s(2)) + 10 * Val(s(1)) + Val(s(0))
End Function
您可以这样调用函数
Dim inputString = InputTextBox.Text Dim inputNumber = Integer.Parse(inputString) Dim reversedNumber = ReverseDigits(inputNumber)
奖金:如果您真的想使用数学来查找反转的数字,这是一个适用于任何数字位数的版本
Public Function ReverseDigits(value As Integer) As Integer Dim s = CStr(value) Dim result As Integer For i = 0 To Len(s) - 1 result += CInt(Val(s(i)) * (10 ^ i)) Next Return result End Function
Turn into text, use strreverse and then return it to number
Public Function ReverseDigits(l As Long) As Long
ReverseDigits = CLng(StrReverse(CStr(l)))
End Function
Private Function ReverseNumber(input As Integer) As Integer
Dim output = 0
Do Until input = 0
output = output * 10 + input Mod 10
input = input \ 10
Loop
Return output
End Function
可以使用任意长度的数字。