用VB编写一个将n进制整数转换成十进制数的通用程序!

用VB编写一个将n进制整数转换成十进制数的通用程序... 用VB编写一个将n进制整数转换成十进制数的通用程序 展开
 我来答
zhuhuaizhong
2013-05-23 · TA获得超过7276个赞
知道大有可为答主
回答量:3978
采纳率:63%
帮助的人:3558万
展开全部

重点是要学会如何利用按权展开式求和,算法了解了,代码就不难了。


Dim a As String, aa As Integer, b As String, bb As Integer, c As Integer
aa = InputBox("输入的是几进制数?")
aa = Trim(aa)
a = InputBox("数是多少?")
a = Trim(a)
For i = 1 To Len(a)
    b = Mid(a, i, 1)
    If (b > 9) Then
        bb = 10 + b - Asc("A")
    Else
        bb = Val(b)
    End If
                                                                    
    c = c + bb * aa ^ (Len(a) - i)
Next i
MsgBox "结果是:" & c

HotMousE
2013-05-28 · TA获得超过146个赞
知道小有建树答主
回答量:212
采纳率:100%
帮助的人:176万
展开全部

临时写的,简单测试通过。

注释也应该写全了,复制直接可用。

有什么不清楚的,追问好了。

Option Explicit
' 最大支持36进制,因为超过这个进制不知道以什么字符来表示了
' 字符表示:
'   11进制: A=10
'   12进制: B=11
'   13进制: C=12
'   14进制: D=13
'   15进制: E=14
'   16进制: F=15
'   17进制: H=16
'   18进制: I=17
'   依次类推
' 参数:
'   Text    需要转换的字符串
'           字符串首字符为(-)时,作为负数进行计算。
'           字符串前2字符为(0x, &H, &O)时,自动转换进制为其相应的进制。
'   Radix   需要转换为的进制基数(可选输入参数:默认值为10进制)
' 返回:
'   有符号8字节整数
'   为调用时可以获得到转换失败,所以内部没有做融错处理
'   调用时可以使用On Error捕获错误后,给出默认数值
Public Function ToDec(ByVal Text As String, Optional Radix As Integer = 10) As Currency
    Const Chars As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                                                                      
    ' 变量声明
    Dim i As Long
    Dim Index As Integer
    Dim Length As Long
    Dim Sign As Long
    Dim Result As Currency
    
    ' 初始化
    Text = UCase(Text)
    Length = Len(Text)
    Sign = 1
    Result = 0
                                                                                      
    ' 符号位检查
    If Length >= 1 Then
        If Mid(Text, 1, 1) = "-" Then
            Sign = -1
            Text = Mid(Text, 2)
            Length = Length - 1
        End If
    End If
                                                                                      
    ' 进制表达式检查
    If Length >= 2 Then
        Select Case Mid(Text, 1, 2)
        Case "0x" ' 16进制(C)
            Radix = 16
            Text = Mid(Text, 3)
            Length = Length - 2
                                                                                          
        Case "&H", "&h" ' 16进制(Basic)
            Radix = 16
            Text = Mid(Text, 3)
            Length = Length - 2
                                                                                          
        Case "&O", "&o" ' 8进制(Basie)
            Radix = 8
            Text = Mid(Text, 3)
            Length = Length - 2
                                                                                          
        End Select
    End If
                                                                                      
    ' 转换每个字符
    For i = 1 To Length                                                                                   
        Index = InStr(Chars, Mid(Text, i, 1)) - 1
        If Index = -1 Then
            Exit For
        ElseIf Index > Radix Then
            Exit For
        End If
                                                                                          
        Result = Result * Radix + Index                                                                                     
    Next
                                                                                      
    ' 符号位处理
    Result = Result * Sign
                                                                                      
    ' 返回
    ToDec = Result
End Function

Private Sub Form_Load()
   
    ' 测试
    MsgBox ToDec("-&HFF")     ' Return -255
    MsgBox ToDec("-FF", 16)   ' Return -255
    MsgBox ToDec("-&HFF", 15) ' Return -255
    MsgBox ToDec("-FF", 15)   ' Return -240
    MsgBox ToDec("-FF", 11)   ' Return 0
    MsgBox ToDec("-FF")       ' Return 0
    
    End
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
网海1书生
科技发烧友

推荐于2017-05-24 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26225

向TA提问 私信TA
展开全部
你这个n是指任意的数吗?如果是,那么就有个难点,假如n大于10,那么用什么符号来表示大于10小于n的数?我们知道16进制数用ABCDEF表示10到15这6个数,那么36进制呢?用10个阿拉伯数字+26个字母?那么再大呢?……所以我认为这个n不能是任意的数。
如果是常用的二进制、八进制、十六进制,那么就好办得多:

Function Nto10(s As String, n As Integer) As Long
If n = 8 Then
Nto10 = Val("&O" & s)
ElseIf n = 16 Then
Nto10 = Val("&H" & s)
ElseIf n = 2 Then
Dim i As Integer
For i = 1 To Len(s)
Nto10 = Nto10 + Val(Mid(s, i, 1)) * 2 ^ (Len(s) - i)
Next
Else
Nto10 = 0
End If
End Function

调用方法:
16进制: MsgBox Nto10("6B3F", 16)
8进制: MsgBox Nto10("1356", 8)
2进制: MsgBox Nto10("10011010", 2)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式