系统:Windows 7
软件:Excel 2016
- 本系列参考LeetCode一些题目,将其进行超级简化,用VBA来解
Part 1: 题目
- 整数各位数的积与和之差
- 测试示例:
- 整数为1234,其各个位数的积=1x2x3x4=24,各个位数的和=1+2+3+4=10,两者之差为24-10=14
- 整数位123,其各个位数的积=1x2x3=6,各个位数的和=1+2+3=6,两者之差为6-6=0
结果
Part 2: 解题逻辑
- 将输入n数字转换为字符串strN
- 获取字符串的长度lengthN
- 对整数的每个位进行遍历循环
For i = 1 To lengthN Step 1
- 设置积的初始结果为1,因为1与其它整数相乘结果不变,依次乘以每个位上的整数
- 设置和的初始结果为0,因为0与其它整数相加结果不变,依次加上每个位上的整数
- 积-和为最终需要的结果
Part 3:代码
Sub main()
n = 1234
result = getMulPlusAdd(n)
tips = CStr(n) & "的积和之差为:" & result
Debug.Print (tips)
n = 123
result = getMulPlusAdd(n)
tips = CStr(n) & "的积和之差为:" & result
Debug.Print (tips)
n = 12345
result = getMulPlusAdd(n)
tips = CStr(n) & "的积和之差为:" & result
Debug.Print (tips)
End Sub
Function getMulPlusAdd(n)
mulResult = 1
addResult = 0
strN = CStr(n)
lengthN = Len(strN)
For i = 1 To lengthN Step 1
ele = Mid(strN, i, 1)
eleInt = CInt(ele)
mulResult = mulResult * eleInt
addResult = addResult + eleInt
Next i
result = mulResult - addResult
getMulPlusAdd = result
End Function
代码截图
Part 4: 部分代码说明
mulResult = mulResult * eleInt
这种方式计算积的时候,需要设置初始值,对于求积的,初始值应设置为1CStr(n)
将变量数据类型转换为字符串CInt(ele)
将变量数据类型转换为整数ele = Mid(strN, i, 1)
获取转换为字符串的整数的每一位上的数值
Ps:算法时间复杂度
- 以上代码的时间复杂度为O(n),一段代码在实现预期结果的情况下,我们希望代码执行更快和更节省资源,所以对于一段算法会引入两个评价指标:时间复杂度和空间复杂度(其实我也是刚学,哈哈)
- 以后在算法题中会简单计算一下时间复杂度,欢迎指正。关于时间复杂度大家可以百度一下,一般用大O标记,例如O(n),n为问题的规模,一般和循环次数相关联
- 更多学习交流,可加小编微信号
learningBin
更多精彩,请关注微信公众号
扫描二维码,关注本公众号