首先了解自冪數的定義,自冪數是指乙個 n 位數,它的每個位上的數字的 n 次冪之和等於它本身。(例如:當n為3時,有1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153,153即是n為3時的乙個自冪數)
自冪數包括:獨身數、水仙花數、四葉玫瑰數、五角星數、六合數、北斗七星數、八仙數、九九重陽數、十全十美數。
先介紹基本的方法,**如下:
#include
#include
#include
#include
"nmec.h"
boolean isselfpower
(int num)
;int
intlen
(int num)
;boolean isselfpower
(int num)
return num == sum;
}int
intlen
(int num)
return cnt;
}int
main()
} endtime =
clock()
; deltatime = endtime - starttime;
printf
("耗時:%ld.%03lds"
, deltatime / clocks_per_sec, deltatime % clocks_per_sec)
;return0;
}
**中的標頭檔案 **「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
#include
#include
"nmec.h"
const
int array[
10]=;
boolean isselfpower
(int num)
;int
intlen
(int num)
;int
numpower
(int a,
int p)
;boolean isselfpower
(int num)
return num == sum;
}int
intlen
(int num)
if(num >=
100000000
&& num <=
999999999)if
(num >=
10000000
&& num <=
99999999)if
(num >=
1000000
&& num <=
9999999)if
(num >=
100000
&& num <=
999999)if
(num >=
10000
&& num <=
99999)if
(num >=
1000
&& num <=
9999)if
(num >=
100&& num <=
999)
if(num >=
10&& num <=99)
return1;
}int
numpower
(int a,
int p)
intmain()
} endtime =
clock()
; deltatime = endtime - starttime;
printf
("耗時:%ld.%03lds"
, deltatime / clocks_per_sec, deltatime % clocks_per_sec)
;return0;
}
第二種方法程式執行結果如下:
由此可見,第二種方法出結果速度明顯加快。對於比較好的機子,可以將時間控制在一分半內。
至此,我的第一篇博文就此問世,在此感謝教主的教誨。
尋找自冪數(C )
include include using namespace std intmain if sum i 邏輯值表達為true時,表示自冪數 cout 求n位自冪數,請輸入位數 cin n cout 思路拓展 如果一種計算會被破壞 或改變 某個變數的值,而這個原始值在後面計算中又要被使用,那就將其賦...
求n位自冪數
無意中看到介紹水仙花數,即乙個3位數的各位數字的3次方和等該數本身 實際上就是自冪數的一種,感覺有點意思,寫個指令碼試了下 usr bin python coding utf 8 import sys,time def deco func def inner args,kwargs b time t...
尋找三位數
問題描述 將1,2,9共9個數分成三組,分別組成三個三位數,且使這三個三位數構成 1 2 3的比例,試求出所有滿足條件的三個三位數。例如 三個三位數192,384,576滿足以上條件。輸入格式 無輸入輸出格式 輸出每行有三個數,為滿足題設三位數。各行為滿足要求的不同解。public class ma...