• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[神梦] 【每日一题】基本计算器 - 2022.4.23 [复制链接]

1#
题目描述

给你一个字符串表达式,请你实现一个基本计算器来计算加减乘除并返回它的值。

整数除法仅保留整数部分。

你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

题目难度:中等
题目来源:Basic Calculator II - LeetCode
  1. Import "SmAssert.dll"

  2. Function 计算器(表达式)
  3.     // 您的代码在这里
  4. End Function


  5. SmAssert 计算器("3+2*2") = 7
  6. SmAssert 计算器(" 3/2 ") = 1
  7. SmAssert 计算器(" 3+5 / 2 ") = 5
复制代码

参考题解


  1. Import "SmAssert.dll"

  2. Function 计算器(表达式)

  3.     '【作者】:神梦无痕
  4.     '【QQ】:1042207232
  5.     '【Q群】:624655641
  6.     
  7.     Dim 栈, 长度, 数字, 结果
  8.     Dim z, i, s, op
  9.     
  10.     表达式 = Replace(表达式, " ", "")
  11.     长度 = Len(表达式)
  12.     栈 = Split(Space(长度))
  13.     数字 = 0
  14.     op = "+"     
  15.     z = 0
  16.     栈(z) = 0
  17.     For i = 1 To 长度
  18.         s = Mid(表达式, i, 1)
  19.         If IsNumeric(s) Then 数字 = 10 * 数字 + (s - "0")
  20.         If IsNumeric(s) = False Or i = 长度 Then
  21.             Select Case op
  22.             Case "+"
  23.                 z = z + 1
  24.                 栈(z) = 数字
  25.             Case "-"
  26.                 z = z + 1
  27.                 栈(z) = -数字
  28.             Case "*"
  29.                 栈(z) = 栈(z) * 数字
  30.             Case "/"
  31.                 栈(z) = Int(栈(z) / 数字)
  32.             End Select
  33.             op = s
  34.             数字 = 0
  35.         End If
  36.     Next
  37.     
  38.     结果 = 0
  39.     While z > -1
  40.         结果 = 结果 + 栈(z)
  41.         z = z - 1
  42.     Wend
  43.     计算器 = 结果
  44. End Function



  45. SmAssert 计算器("3+2*2") = 7
  46. SmAssert 计算器(" 3/2 ") = 1
  47. SmAssert 计算器(" 3+5 / 2 ") = 5
复制代码





插件下载

 

【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误

最后编辑神梦科技 最后编辑于 2022-04-23 13:54:08
2#

【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误

3#

学习学习

4#

有点难

5#

好吧 我投降了 道行不够 ,主要是 运算 先后没法处理 ,

6#

,


Function 计算器(s)
Dim 长度 = Len(s)
Dim b(),c,f
TracePrint 长度
For i = 1 To 长度
b(i)=Mid(s,i,1)
TracePrint zm.VarInfo (b(i))
Next
F = (长度-1)/2
TracePrint F

For i = 1 To 2
If b(1 + i) = "+" Then
TracePrint "+"
ElseIf b(1 + i) = "-" Then
TracePrint "-"
ElseIf b(1 + i) = "*" Then
TracePrint "*"
ElseIf b(1 + i) = "/" Then
TracePrint "/"
End If

Next

End Function


我写到这里 突然感觉运算先后没法处理

最后编辑903077007 最后编辑于 2022-04-23 17:29:09
7#

,

不知道 PC 版是不是 写这个 容易些,PC 还没学

8#

老师给我说过 任何 数字型字符串+ 0 or -0 or * 1 都会转成数字

运算符可以 用对比字符串来 判断 当前位置 运算符 为 + - * /

就是 运算 先后没思路

9#

,

栈 = Split(Space(长度) 在安卓好像不能这么用

10#

111111111111111111111111

11#

6666666666666666

12#

学习一下

13#

.54

14#

++++分啦

15#

看着就头大,仰慕大神。。。

16#

学无止境

17#

zhicdal

18#

学习一下

19#

111111111

20#

移位加密

发新话题 回复该主题