作者:绿色风
分类:
时间:2022-08-17
浏览:298
楼主 amulee |
Q:100的阶乘的结果的每位数之和等于多少? A:请参考一下代码:
- Sub MyFact()
- Dim ArrJG, ArrTemp
- Dim SumA As Double
- Dim i&, j&
- Dim DNumber '目标阶乘
- DNumber = 100
- '计算阶乘长度
- SumA = 1
- For i = 1 To DNumber
- SumA = Log(i) / Log(10) + SumA
- Next i
- ReDim ArrJG(Int(SumA) - 1)
- ReDim ArrTemp(UBound(ArrJG))
- '初始化结果数组
- ArrJG(0) = 1
- '计算阶乘结果
- For i = 2 To DNumber
- For j = 0 To UBound(ArrJG)
- ArrTemp(j) = ArrJG(j) * i
- Next j
- j = 0
- Do While j <= UBound(ArrJG)
- ArrJG(j) = ArrTemp(j) Mod 10
- If ArrTemp(j) >= 10 Then ArrTemp(j + 1) = ArrTemp(j + 1) + ArrTemp(j) \ 10
- j = j + 1
- Loop
- Next i
- MsgBox WorksheetFunction.Sum(ArrJG)
- End Sub
|
2楼 amulee |
利用该方法,可以求出大数的阶乘,只要数组定义的时候内存允许。- Sub MyFact()
- Dim ArrJG, ArrTemp
- Dim SumA As Double
- Dim i&, j&
- Dim DNumber '目标阶乘
- Dim strJG$ '结果输出
- DNumber = 100 '要计算的阶乘
- '计算阶乘长度
- SumA = 1
- For i = 1 To DNumber
- SumA = Log(i) / Log(10) + SumA
- Next i
- ReDim ArrJG(Int(SumA) - 1)
- ReDim ArrTemp(UBound(ArrJG))
- '初始化结果数组
- ArrJG(0) = 1
- '计算阶乘结果
- For i = 2 To DNumber
- For j = 0 To UBound(ArrJG)
- ArrTemp(j) = ArrJG(j) * i
- Next j
- j = 0
- Do While j <= UBound(ArrJG)
- ArrJG(j) = ArrTemp(j) Mod 10
- If ArrTemp(j) >= 10 Then ArrTemp(j + 1) = ArrTemp(j + 1) + ArrTemp(j) \ 10
- j = j + 1
- Loop
- Next i
- '结果输出
- For i = UBound(ArrJG) To 0 Step -1
- strJG = strJG & ArrJG(i)
- Next i
- MsgBox DNumber & "的阶乘为:" & strJG
- End Sub
|
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一