Excel-VBA-算法挑战-05-整数各位数的积与和之差

系统:Windows 7
软件:Excel 2016

  • 本系列参考LeetCode一些题目,将其进行超级简化,用VBA来解

Part 1: 题目

  1. 整数各位数的积与和之差
  2. 测试示例:
    • 整数为1234,其各个位数的积=1x2x3x4=24,各个位数的和=1+2+3+4=10,两者之差为24-10=14
    • 整数位123,其各个位数的积=1x2x3=6,各个位数的和=1+2+3=6,两者之差为6-6=0

结果
在这里插入图片描述

Part 2: 解题逻辑

  1. 将输入n数字转换为字符串strN
  2. 获取字符串的长度lengthN
  3. 对整数的每个位进行遍历循环For i = 1 To lengthN Step 1
    • 设置积的初始结果为1,因为1与其它整数相乘结果不变,依次乘以每个位上的整数
    • 设置和的初始结果为0,因为0与其它整数相加结果不变,依次加上每个位上的整数
  4. 积-和为最终需要的结果

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: 部分代码说明

  1. mulResult = mulResult * eleInt这种方式计算积的时候,需要设置初始值,对于求积的,初始值应设置为1
  2. CStr(n)将变量数据类型转换为字符串
  3. CInt(ele)将变量数据类型转换为整数
  4. ele = Mid(strN, i, 1)获取转换为字符串的整数的每一位上的数值

Ps:算法时间复杂度

  1. 以上代码的时间复杂度为O(n),一段代码在实现预期结果的情况下,我们希望代码执行更快和更节省资源,所以对于一段算法会引入两个评价指标:时间复杂度空间复杂度(其实我也是刚学,哈哈)
  2. 以后在算法题中会简单计算一下时间复杂度,欢迎指正。关于时间复杂度大家可以百度一下,一般用大O标记,例如O(n),n为问题的规模,一般和循环次数相关联

  • 更多学习交流,可加小编微信号learningBin

更多精彩,请关注微信公众号
扫描二维码,关注本公众号

公众号底部二维码.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值