SQL語句實現水仙花數求取

2021-10-10 07:58:49 字數 3013 閱讀 5992

"水仙花數 ",所謂 "水仙花數 "是指乙個三位數,其各位數字立方和等於該數本身。例如: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 輸入資料有多組,每組佔一行,...