日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

快速寻找9位数内的自幂数

發布時間:2024/3/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速寻找9位数内的自幂数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先了解自冪數的定義,自冪數是指一個 n 位數,它的每個位上的數字的 n 次冪之和等于它本身。(例如:當n為3時,有1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153,153即是n為3時的一個自冪數)
自冪數包括:獨身數、水仙花數、四葉玫瑰數、五角星數、六合數、北斗七星數、八仙數、九九重陽數、十全十美數。
先介紹基本的方法,代碼如下:

#include <stdio.h> #include <time.h> #include <math.h>#include "Nmec.h"boolean isSelfPower(int num); int intLen(int num);boolean isSelfPower(int num) {int n;int len;int sum = 0;len = intLen(num);for (n = num; n; n /= 10) {sum += pow(n % 10, len);}return num == sum; }int intLen(int num) {int cnt = 0;while(num) {cnt++;num /= 10;}return cnt; }int main() {int maxNum;int i;long startTime;long endTime;long deltaTime;printf("請輸入數值范圍:");scanf("%d", &maxNum);startTime = clock();for (i = 0; i < maxNum; i++) {if (isSelfPower(i)) {printf("%d是自冪數\n", i);}}endTime = clock();deltaTime = endTime - startTime;printf("耗時:%ld.%03lds", deltaTime / CLOCKS_PER_SEC, deltaTime % CLOCKS_PER_SEC);return 0; }

代碼中的頭文件 **“Nmec.h”**內容如下:

#ifndef _NMEC_H_ #define _NMEC_H_typedef unsigned char boolean;#define TRUE 1 #define FALSE 0 #define NOT_FOUND -1#endif

按照這個方法尋找9位數內的自冪數, 所需時間很長,等了6分鐘就沒在等。 下面介紹一種可以在一分半內找出9位數內的自冪數,話不多說放代碼:

#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("請輸入數值范圍:");scanf("%d", &maxNum);startTime = clock();for (i = 0; i < maxNum; i++) {if (isSelfPower(i)) {printf("%d是自冪數\n", i);}}endTime = clock();deltaTime = endTime - startTime;printf("耗時:%ld.%03lds", deltaTime / CLOCKS_PER_SEC, deltaTime % CLOCKS_PER_SEC);return 0; }

第二種方法程序運行結果如下:

由此可見,第二種方法出結果速度明顯加快。對于比較好的機子,可以將時間控制在一分半內。
至此,我的第一篇博文就此問世,在此感謝教主的教誨。

總結

以上是生活随笔為你收集整理的快速寻找9位数内的自幂数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。