反转数字

问题描述 投票:0回答:3

我正在尝试制作一个采用三位数的数字并将其取反的函数(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

我已经尝试过了,但是不知道为什么它不起作用。

vb.net
3个回答
1
投票

您可以将整数转换为字符串,将字符串取反,然后转换回整数。您可能要强制执行三位数的要求。您可以在尝试转换之前验证参数

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


0
投票
或在VBA中

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


0
投票
这是我最近写的一种方法,当其他人在其他地方发布基本相同的问题,可能做相同的作业时:

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

可以使用任意长度的数字。
© www.soinside.com 2019 - 2024. All rights reserved.