iT邦幫忙

2

針對數字反轉的問題,請問還有更精簡的寫法嗎?

  • 分享至 

  • xImage

Hi 各位IT大大,目前我是還在研究VBA的小白,因為在大學的時候被一個難題難住了,老師問如何把數字反轉,多年後直到畢業都未曾解決(邏輯有問題),曾經有用字串解,但老師說這並不是他想要的答案,他希望的資料型態是數值,最近又想起來了,就順便做了以下VBA的格式

Sub cls()

Dim a, b, c, d As Long
Dim x, e
If Range("a1").Value > 0 Then
a = Range("A1").Value
d = Range("A1").Value


Do While a >= 1
b = b + 1
a = a \ 10
Loop
'判斷為幾位數
c = b
Do While c >= 1
c = c - 1
x = (d Mod 10) * 10 ^ c
e = e + x
d = d \ 10
Loop
MsgBox (e)
Else

a = Range("A1").Value * -1
d = Range("A1").Value * -1


Do While a >= 1
b = b + 1
a = a \ 10
Loop
'判斷為幾位數
c = b
Do While c >= 1
c = c - 1
x = (d Mod 10) * 10 ^ c
e = e + x
d = d \ 10
Loop
MsgBox ("-" & e)
End If


End Sub

看更多先前的討論...收起先前的討論...
ccutmis iT邦高手 2 級 ‧ 2023-02-17 12:16:29 檢舉
下次老師問你時,
你就回:「問ChatGPT : 幫我寫一個 VBA 函式,使用 mod 將輸入數字 321 輸出數字 123 」 然後答案就出來了...
wolfwang iT邦研究生 4 級 ‧ 2023-02-17 12:38:56 檢舉
ChatGPT 給了這個 funcion

Function ReverseNumber(inputNumber As Long) As Long
Dim reversedNumber As Long
Do While inputNumber > 0
reversedNumber = (reversedNumber * 10) + (inputNumber Mod 10)
inputNumber = Int(inputNumber / 10)
Loop
ReverseNumber = reversedNumber
End Function
froce iT邦大師 1 級 ‧ 2023-02-17 13:03:49 檢舉
> 他希望的資料型態是數值

轉型回來不就好了?
全數值的解法就while去做。
揮揮手 iT邦研究生 5 級 ‧ 2023-02-17 13:44:49 檢舉
哈哈 我也覺得
他給題目的時候 就要說用演算法來解

不然我也是直接想用字串反轉陣列解決
froce iT邦大師 1 級 ‧ 2023-02-17 14:09:44 檢舉
> 就要說用演算法來解

轉字串來解理論上也是廣義的演算法啊。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3

如果是我來處理的話。
我會先將其

字串化->陣列化->反轉陣列->結合回字串->數值化。

1
Han
iT邦研究生 1 級 ‧ 2023-02-17 15:22:35

幫你問了 ChatGPT 大神了

Sub ReverseNumber()
    Dim n As Long, r As Long
    n = Abs(Range("A1").Value)
    Do While n > 0
        r = r * 10 + n Mod 10
        n = n \ 10
    Loop
    If Range("A1").Value < 0 Then r = -r
    MsgBox r
End Sub

這段 Code 和你原來的 Code 非常相似,但對變數的宣告和初始化進行了簡化。同時,我們還使用了Abs函數來處理負數的情況。最後,我們使用了MsgBox函數來顯示反轉後的數字,而不是使用一個額外的變數來存儲結果。

Han iT邦研究生 1 級 ‧ 2023-02-17 15:22:55 檢舉

只是我不會 vba 不知道對不對就是了

我要發表回答

立即登入回答