当前位置: 代码迷 >> J2EE >> 口试遇到的一个奇葩题目 求大神们解答!
  详细解决方案

口试遇到的一个奇葩题目 求大神们解答!

热度:241   发布时间:2016-04-19 22:43:09.0
面试遇到的一个奇葩题目 求大神们解答!!!
题目大致是  String eveal(String s)  意思是这个方法要返回一个结果  输入参数是一个字符串形式的 算式  如  (1+1)*3/2+1这样形式的字符串 你要返回结果   
------解决方案--------------------
这个就是一个算式计算器的核心函数
下面是我软件中的一个函数,完全符合你要求,只不过是VB6的代码。

Option Explicit
Dim Hds As String
Private Sub Form_Load()
    MsgBox "(1+1)×3÷2+1=" & GetJSResult("(1+1)×3÷2+1")
End Sub
Public Function GetJSResult(ByVal Jsgs As String) As Currency   '递归计算所给的数学算式
    Dim Kh1 As Long, Kh2 As Long, halfKh As Long
    Dim i As Long, jsgs1 As String
    jsgs1 = Jsgs
    '找出第一对最外层括号,并将其中内容做为参数调用本函数GetJSResult,继续剥离括号
    Kh1 = InStr(1, jsgs1, "(")
    If Kh1 > 0 Then
        halfKh = halfKh + 1
        For i = Kh1 + 1 To Len(jsgs1)
            If Mid(jsgs1, i, 1) = "(" Then halfKh = halfKh + 1
            If Mid(jsgs1, i, 1) = ")" Then
                halfKh = halfKh - 1
                If halfKh = 0 Then  '
                    Kh2 = i
                    jsgs1 = Left(jsgs1, Kh1 - 1) & GetJSResult(Mid(jsgs1, Kh1 + 1, Kh2 - Kh1 - 1)) & Right(jsgs1, Len(jsgs1) - Kh2)
                    Hds = Hds & vbCrLf & "=" & jsgs1
                    Kh1 = InStr(1, jsgs1, "(")
                    If Kh1 = 0 Then
                        Exit For
                    Else
                        i = Kh1 - 1
                    End If
                End If
            End If
        Next
    End If
    '至此话号被完全剥离,依据先乘除后加减的方式计算,并将结果返回
    '计算乘除 fh = "+-×÷"
    Dim Fh1 As Long, Fh2 As Long, Fh3 As Long, Num1 As String, Num2 As String, j As Long, lsbl As String
    jsgs1 = Replace(jsgs1, ".", ".")
    For i = 1 To Len(jsgs1)
        '---找第一个乘除号
        Fh1 = 0: Fh2 = 0
        Fh1 = InStr(1, jsgs1, "×")
        Fh2 = InStr(1, jsgs1, "÷")
        If (Fh1 < Fh2 And Fh1 > 0) Or Fh2 = 0 Then
            Fh2 = Fh1
        End If
        
        If Fh2 = 0 Then Exit For    '式中无乘除运算,跳出循环向下执行
        
        '-----找乘除号前面的数字
        For j = Fh2 - 1 To 1 Step -1
            lsbl = Mid(jsgs1, j, 1)
            If lsbl = "+" Or lsbl = "-" Then
                Num1 = Val(Mid(jsgs1, j + 1, Fh2 - j - 1))
                Fh1 = j
  相关解决方案