"水仙花數 ",所謂 "水仙花數 "是指乙個三位數,其各位數字立方和等於該數本身。例如:370是乙個 "水仙花數 ",因為 370=3 的三次方+7的三次方+0 的三次方
本文用兩種方法解決水仙花數的求取
第一種使用一層while迴圈,從100-1000遍歷,取出其個位、十位、百位的數字,進行三次方計算後相加再與原數字對比,相等就列印輸出。
其取出個位、十位、百位的方法需要用到內建函式:cast函式
cast函式用於將某種資料型別的表示式顯式轉換為另一種資料型別,如:
cast(substring(cast(
@nas
varchar(3
)),1
,1)as
int
該語句將int型變數n先更改為varchar(可變長度字串)型別,再利用substring函式取出從第1個字元開始的1個字元,即在水仙花數的求取中就是取出了3位數的百位,最後再將其轉化未int型變數。
方法一整體**如下:
declare
@nint,@x
asint,@y
asint,@z
asint
set@n
=100
while
@n<
1000
begin
set@x
=cast(substring(cast(
@nas
varchar(3
)),1
,1)as
int)
set@y
=cast(substring(cast(
@nas
varchar(3
)),2
,1)as
int)
set@z
=cast(substring(cast(
@nas
varchar(3
)),3
,1)as
int)
if power(@x,
3)+power(@y,
3)+power(@z,
3)=@n
begin
print
@nend
set@n=@n
+1end
用x,y,z分別儲存其百位、十位和個位
方法二是本人一開始使用的方法,即同樣定義x,y,z儲存其百位、十位和個位,通過3個while迴圈,x從1-9遍歷,y、z分別從0-9遍歷,通過x,y,z三次方的和與100x+10y+z對比得到水仙花數。
而一開始錯誤的實現**如下:
declare
@xint,@y
int,
@zint,@m
intset@x=
1set@y=
0set@z=
0while
@x<
10begin
while
@y<
10begin
while
@z<
10begin
if power(@x,
3)+power(@y,
3)+power(@z,
3)=(
@x*100+@y*
10+@z)
begin
select@m=
@x*100+@y*
10+@zprint
@mend
set@z=@z
+1endset@y=
@y+1end
set@x=@x
+1end
通過sql server執行**後只有命令已成功完成語句,並沒有輸出結果,說明**有誤
經過檢查,發現有可能是迴圈出問題,便用以下**進行檢驗:
declare
@xint,@y
int,
@zint,@m
intset@x=
1set@y=
0set@z=
0while
@x<
10begin
while
@y<
10begin
while
@z<
10begin
print
@zset@z=
@z+1end
set@y=@y
+1endset@x=
@x+1end
發現其輸出結果僅有10次
發現原因是while巢狀迴圈外部迴圈變數不能進入內部迴圈,於是將set @y與set @z語句放入內層迴圈之前
修正後**(正確)如下:
declare
@xint,@y
int,
@zint,@m
intset@x=
1while
@x<
10begin
set@y=0
while
@y<
10begin
set@z=0
while
@z<
10begin
if power(@x,
3)+power(@y,
3)+power(@z,
3)=(
@x*100+@y*
10+@z)
begin
select@m=
@x*100+@y*
10+@zprint
@mend
set@z=@z
+1endset@y=
@y+1end
set@x=@x
+1end
其輸出結果與方法一相同
最後得到153,370,371,407為水仙花數
求水仙花 ghpython 水仙花數02
今天咱們繼續來看看老潘微博裡的乙個python小案例,求水仙花數,這個小案例在前兩天已經分享了,今天分享另一種方法,常言道只要思想不滑坡,方法總比困難多,而且今天的方法個人覺得更pythonic一點。水仙花數 四葉玫瑰數 五角星數 由於2位數的自冪數不存在,這裡直接從100遍歷到100000 for...
水仙花數題解
水仙花數 3位數,其各位數字立方和為該數本身.include stdio.h void main int i,j,k,n 定義n的個位數為k,十位為j,百位為i printf narcissus numbers are for n 100 n 1000 n 使n從100 999迴圈 i n 100 ...
hdu 水仙花數
problem description 春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的 水仙花數 是指乙個三位數,它的各位數字的立方和等於其本身,比如 153 1 3 5 3 3 3。現在要求輸出所有在m和n範圍內的水仙花數。input 輸入資料有多組,每組佔一行,...