|
发表于 2016-4-26 11:17
|
显示全部楼层
本楼为最佳答案
本帖最后由 lichuanboy44 于 2016-4-26 11:55 编辑
- sub pubu()
- '有思路,不敢运行的程序
- tt = Timer
- Dim cr1: p = 1
- ReDim cr1(1 To 2, 1 To p)
- For a = 100 To 999 '除数为3位数
- For Z = 10000 To 99999 '商为5位数,且千位必为0
- s = Z * a '乘积s为被除数,应为8位数
- z1 = --Mid(Z, 1, 1): z2 = --Mid(Z, 2, 1): z3 = --Mid(Z, 3, 1)
- z4 = --Mid(Z, 4, 1): z5 = --Mid(Z, 5, 1) '将商的各位数依次取出
- If z2 = 0 Then '0if
- If s >= 10000000 And s <= 99999999 Then '1if
- s1 = --Mid(s, 1, 4) - z1 * a '除法算式第一步:被除数左起4位数-商的万位数*除数
- If Len(z1 * a) = 4 And s1 >= 10 And s1 <= 99 Then '2if
- s2 = s1 * 100 + Val(Mid(s, 5, 2)) - z3 * a '算式第二步:上步差*100+被除数5和6位数-商的百位数*除数
- If Len(z3 * a) = 3 And s2 >= 10 And s2 <= 99 Then '3if
- s3 = s2 * 10 + Val(Mid(s, 7, 1)) - z4 * a '算式第三步,类同第二步
- If Len(z4 * a) = 3 And s3 >= 100 And s3 <= 999 Then '4if
- s4 = s3 * 10 + Val(Mid(s, 8, 1)) - z5 * a '算式第四步,同上
- If Len(z5 * a) = 4 And s4 = 0 Then '5if
- ReDim Preserve cr1(1 To 2, 1 To p)
- cr1(1, p) = a: cr1(2, p) = Z
- p = p + 1
- tt2 = Timer
- If tt2 - tt > 600 Then
- MsgBox "程序运行大于600秒,防止死机退出"
- Exit Sub
- End If
- End If '5if
- End If '4if
- End If '3if
- End If '2if
- End If '1if
- End If '0if
- Next
- Next
- [G1] = UBound(cr1, 2): [G2] = Timer - tt
- [A1].Resize(p, 2) = WorksheetFunction.Transpose(cr1)
- MsgBox Format(Timer - tt, "0.000秒") & vbCrLf & _
- "符合条件的数的个数为:" & UBound(cr1, 2)
- 'Stop
- End Sub
复制代码 |
评分
-
查看全部评分
|