``# 自幂数的9位数查找之算法优化(C语言)
这是一篇C语言有关自幂数查找的优化过程,目前笔者最好结果是8位数用时7.007秒,9位数用时79.079秒。(水仙数是4位数自幂数)
期待有更棒的结果。
思维导图先上!!!
一,明确自幂数
1.什么是自幂数?
自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(水仙数是4位数自幂数)
(例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数)
2.关键点。
1)幂数(自幂数的位数)
2)各底数(自幂数的每个位上的数)
3)一个数的幂次方
4)求和比较
二,一个数的幂次方
1.得到幂数
1)初步想法:
1.这个数除以10赋值给自己:
2.这个数为0,跳出循环。
3.这个数不为0,位长加1,执行第一步。
2)优化: 打破循环,直接用条件语句判断范围完成。
这里有一个很棒的优化点。
例如:一般都会从0开始。
但是,这样效率并不高,每次查找9位数都得先经过前面的1到8位数的判断,而先判断9位数会则减少时间,尤其1位数的个数少,全部经历8次判断次数的总次数远远少于9位数在底下的情况。如下: