快速寻找9位数内的自幂数
生活随笔
收集整理的這篇文章主要介紹了
快速寻找9位数内的自幂数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先了解自冪數(shù)的定義,自冪數(shù)是指一個 n 位數(shù),它的每個位上的數(shù)字的 n 次冪之和等于它本身。(例如:當(dāng)n為3時,有1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153,153即是n為3時的一個自冪數(shù))
自冪數(shù)包括:獨身數(shù)、水仙花數(shù)、四葉玫瑰數(shù)、五角星數(shù)、六合數(shù)、北斗七星數(shù)、八仙數(shù)、九九重陽數(shù)、十全十美數(shù)。
先介紹基本的方法,代碼如下:
代碼中的頭文件 **“Nmec.h”**內(nèi)容如下:
#ifndef _NMEC_H_ #define _NMEC_H_typedef unsigned char boolean;#define TRUE 1 #define FALSE 0 #define NOT_FOUND -1#endif按照這個方法尋找9位數(shù)內(nèi)的自冪數(shù), 所需時間很長,等了6分鐘就沒在等。 下面介紹一種可以在一分半內(nèi)找出9位數(shù)內(nèi)的自冪數(shù),話不多說放代碼:
#include <stdio.h> #include <time.h>#include "Nmec.h"const int array[][10] = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,0, 1, 2*2, 3*3, 4*4, 5*5, 6*6, 7*7, 8*8, 9*9,0, 1, 2*2*2, 3*3*3, 4*4*4, 5*5*5, 6*6*6, 7*7*7, 8*8*8, 9*9*9,0, 1, 2*2*2*2, 3*3*3*3, 4*4*4*4, 5*5*5*5, 6*6*6*6, 7*7*7*7, 8*8*8*8, 9*9*9*9,0, 1, 2*2*2*2*2, 3*3*3*3*3, 4*4*4*4*4, 5*5*5*5*5, 6*6*6*6*6, 7*7*7*7*7, 8*8*8*8*8, 9*9*9*9*9,0, 1, 2*2*2*2*2*2, 3*3*3*3*3*3, 4*4*4*4*4*4, 5*5*5*5*5*5, 6*6*6*6*6*6, 7*7*7*7*7*7, 8*8*8*8*8*8, 9*9*9*9*9*9,0, 1, 2*2*2*2*2*2*2, 3*3*3*3*3*3*3, 4*4*4*4*4*4*4, 5*5*5*5*5*5*5, 6*6*6*6*6*6*6, 7*7*7*7*7*7*7, 8*8*8*8*8*8*8, 9*9*9*9*9*9*9,0, 1, 2*2*2*2*2*2*2*2, 3*3*3*3*3*3*3*3, 4*4*4*4*4*4*4*4, 5*5*5*5*5*5*5*5, 6*6*6*6*6*6*6*6, 7*7*7*7*7*7*7*7, 8*8*8*8*8*8*8*8, 9*9*9*9*9*9*9*9,0, 1, 2*2*2*2*2*2*2*2*2, 3*3*3*3*3*3*3*3*3, 4*4*4*4*4*4*4*4*4, 5*5*5*5*5*5*5*5*5, 6*6*6*6*6*6*6*6*6, 7*7*7*7*7*7*7*7*7, 8*8*8*8*8*8*8*8*8, 9*9*9*9*9*9*9*9*9, };boolean isSelfPower(int num); int intLen(int num); int numPower(int a, int p);boolean isSelfPower(int num) {int n;int len;int sum = 0;len = intLen(num);for (n = num; n; n /= 10) {sum += numPower(n % 10, len); }return num == sum; }int intLen(int num) {if (num < 0) {return 0;}if (num >= 100000000 && num <= 999999999) {return 9;}if (num >= 10000000 && num <= 99999999) {return 8;}if (num >= 1000000 && num <= 9999999) {return 7;}if (num >= 100000 && num <= 999999) {return 6;}if (num >= 10000 && num <= 99999) {return 5;}if (num >= 1000 && num <= 9999) {return 4;}if (num >= 100 && num <= 999) {return 3;}if (num >= 10 && num <= 99) {return 2;}return 1; }int numPower(int a, int p) {return array[p][a]; }int main() {int maxNum;int i;long startTime;long endTime;long deltaTime;printf("請輸入數(shù)值范圍:");scanf("%d", &maxNum);startTime = clock();for (i = 0; i < maxNum; i++) {if (isSelfPower(i)) {printf("%d是自冪數(shù)\n", i);}}endTime = clock();deltaTime = endTime - startTime;printf("耗時:%ld.%03lds", deltaTime / CLOCKS_PER_SEC, deltaTime % CLOCKS_PER_SEC);return 0; }第二種方法程序運行結(jié)果如下:
由此可見,第二種方法出結(jié)果速度明顯加快。對于比較好的機子,可以將時間控制在一分半內(nèi)。
至此,我的第一篇博文就此問世,在此感謝教主的教誨。
總結(jié)
以上是生活随笔為你收集整理的快速寻找9位数内的自幂数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 手势操作Gesture
- 下一篇: 对于特殊轨道,是否违反泡利不相容原理?