Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: laoau138

[已解决]用VBA一维动态数组计算水仙花数

[复制链接]
发表于 2017-4-8 13:42 | 显示全部楼层
金樽空对月 发表于 2017-4-5 14:53
8位数,要判断上千万的数据量,你觉得用EXCEL来运算几秒钟完成,现实吗?

9位、10位、11位的计算,2秒出结果:
912985153
998553211
534494836
986544433
472335975
977554332
146511208
865421110
4679307774
9777764430
94204591914
99954442110
82693916578
99887665321
49388550606
98866554300
44708635679
98776654430
42678290603
98766432200
40028394225
98544322200
32164049651
96654432110
32164049650
96654432100


12位、13位不存在自幂数。
14位数只有1个自幂数,计算6秒完成:
28116440335967 (98766544332110)


哈哈。


评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2017-4-8 17:08 | 显示全部楼层
香川群子 发表于 2017-4-8 13:42
9位、10位、11位的计算,2秒出结果:

你的代码在哪里,快点拿出来,让别人好好学习啊
回复

使用道具 举报

 楼主| 发表于 2017-4-8 17:13 | 显示全部楼层
香川群子 发表于 2017-4-8 13:29
你也许不会相信,找到3-8位的这18个自幂数,用我的递归代码只需0.25秒。

算法是关键。

一般人的脑,没有可能想出来高深算法

更何况一般人认为,只要做出来结果就可以了

试问有几个人能达到你这种境界

你这样有好处也有坏处,锻练了大脑,同时也损坏了大脑


today你快点来学习了







回复

使用道具 举报

发表于 2017-4-8 20:31 | 显示全部楼层
香川群子 发表于 2017-4-8 13:29
你也许不会相信,找到3-8位的这18个自幂数,用我的递归代码只需0.25秒。

算法是关键。

[em17][em17][em17]
回复

使用道具 举报

发表于 2017-4-9 13:57 | 显示全部楼层

略微透露一下:

135、153、315、351、513、531 这6个数他们的自幂数总和是一样的。
只需检查一个就可以了。

这样,3位数你一般检查000-999是1000个,我只需检查=Combin(3+9,3)=220个数。

因此检查效率差异如下:
位数
一般检查
组合检查
比例
效率倍数
3
999
220
22.022%
4.5
4
9999
715
7.151%
14.0
5
99999
2002
2.002%
49.9
6
999999
5005
0.501%
199.8
7
9999999
11440
0.114%
874.1
8
99999999
24310
0.024%
4113.5
总和
111110994
43692
0.039%
2543.1


这样按比例你要计算16分钟,而我只要0.38秒……最后结果只要0.25秒,
那是因为我还有其它的很多技巧,还能提速1.5倍!


呵呵。

回复

使用道具 举报

发表于 2017-4-9 14:07 | 显示全部楼层

即使用一般方法检查区间内全部数字,我也写了个代码,计算8位数只要40秒。
计算3-8也就1分钟左右。比你的代码还是要快60倍。(算法比较复杂一些。)

算法原理是:
1. 预先计算0-9的n次幂值
2. 用数组记录n个数位的值、用数组循环算法进行逢九进一的运算……比直接循环然后mid拆分快几十倍。
3. 动态计算数值升位后的n次幂值之和,然后比较。

其中第2步骤算法是关键,一般人不会考虑这么复杂,写不出这个代码。
回复

使用道具 举报

发表于 2017-4-9 21:29 | 显示全部楼层
香川群子 发表于 2017-4-9 14:07
即使用一般方法检查区间内全部数字,我也写了个代码,计算8位数只要40秒。
计算3-8也就1分钟左右。比你 ...

你的思路的确开阔,见解也很独到,本人在这里膜拜了,向你学习。
回复

使用道具 举报

发表于 2017-4-9 21:36 | 显示全部楼层
香川群子 发表于 2017-4-9 13:57
略微透露一下:

135、153、315、351、513、531 这6个数他们的自幂数总和是一样的。

你认识这个楼主laoau138吗?我观察他有一段时间了,他经常在这个论坛里问一些关于数字方面的问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-11 04:30 , Processed in 0.167533 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表