1.整除取余分离各位

import time
def separate(num): #将一个数的每一位分离并储存在一个列表中
    a = []
    while num != 0:
        a.append(num % 10)
        num = num // 10
    a.reverse()
    return a
bg = time.time()
for i in range(100,10000000):
    A = separate(i) #分离
    n = len(A)  #求数的位数
    sum = 0
    for x in A:
        sum += x**n
    if sum == i:
        print(i)
ed = time.time()
print("用时%ds"%(ed-bg))

运行用时47s。

2.转化为字符串分离

import time
def separate(num):
    num = str(num)
    num = list(num)
    a = []
    for i in num:
        a.append(int(i))
    return a
bg = time.time()
for i in range(100,10000000):
    
    A = separate(i)
    n = len(A)
    sum = 0
    for x in A:
        sum += x**n
    if sum == i:
        print(i)
ed = time.time()
print("用时%ds"%(ed-bg))

运行用时58s

两种方式耗时好像区别不大

3.再用c试一下

#include <stdio.h>
#include <math.h>

int main()
{   long num;
    for(num = 100; num <= 9999999; num++)
    {
        int a[7],i=0,x;
        long sum = 0,n = num;
        while(n != 0)
        {
            a[i] = n % 10;
            n = n / 10;
            i++;
        }

        for(x = 0;x < i;x++)
        {
            sum += powf(a[x],i);
        }
        if (sum == num)
            printf("%ld\n",num);
    }
    return 0;
}

运行时间6.344s,快了好多😂

posted on 2018-04-26 13:08  我黑的一批  阅读(352)  评论(0)    收藏  举报