当前位置:网站首页>SQL语句实现水仙花数求取
SQL语句实现水仙花数求取
2020-11-09 10:51:00 【osc_cx8uhydz】
SQL语句实现水仙花数求取
"水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:370是一个 "水仙花数 ",因为 370=3 的三次方+7的三次方+0 的三次方
实现方法
本文用两种方法解决水仙花数的求取
方法一
第一种使用一层while循环,从100-1000遍历,取出其个位、十位、百位的数字,进行三次方计算后相加再与原数字对比,相等就打印输出。
其取出个位、十位、百位的方法需要用到内置函数:CAST函数
CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型,如:
cast(substring(cast(@n as varchar(3)),1,1) as int
该语句将int型变量n先更改为varchar(可变长度字符串)类型,再利用substring函数取出从第1个字符开始的1个字符,即在水仙花数的求取中就是取出了3位数的百位,最后再将其转化未int型变量。
方法一整体代码如下:
declare @n int,@x as int,@y as int,@z as int
set @n=100
while @n<1000
begin
set @x=cast(substring(cast(@n as varchar(3)),1,1) as int)
set @y=cast(substring(cast(@n as varchar(3)),2,1) as int)
set @z=cast(substring(cast(@n as varchar(3)),3,1) as int)
if power(@x,3)+power(@y,3)+power(@z,3)=@n
begin
print @n
end
set @n=@n+1
end
用x,y,z分别存储其百位、十位和个位
方法二
方法二是本人一开始使用的方法,即同样定义x,y,z存储其百位、十位和个位,通过3个while循环,x从1-9遍历,y、z分别从0-9遍历,通过x,y,z三次方的和与100x+10y+z对比得到水仙花数。
而一开始错误的实现代码如下:
declare @x int, @y int,@z int,@m int
set @x=1
set @y=0
set @z=0
while @x<10
begin
while @y<10
begin
while @z<10
begin
if power(@x,3)+power(@y,3)+power(@z,3)=(@x*100+@y*10+@z)
begin
select @m=@x*100+@y*10+@z
print @m
end
set @z=@z+1
end
set @y=@y+1
end
set @x=@x+1
end
通过sql server执行代码后只有命令已成功完成语句,并没有输出结果,说明代码有误
经过检查,发现有可能是循环出问题,便用以下代码进行检验:
declare @x int, @y int,@z int,@m int
set @x=1
set @y=0
set @z=0
while @x<10
begin
while @y<10
begin
while @z<10
begin
print @z
set @z=@z+1
end
set @y=@y+1
end
set @x=@x+1
end
发现其输出结果仅有10次
发现原因是while嵌套循环外部循环变量不能进入内部循环,于是将set @y与set @z语句放入内层循环之前
修正后代码(正确)如下:
declare @x int, @y int,@z int,@m int
set @x=1
while @x<10
begin
set @y=0
while @y<10
begin
set @z=0
while @z<10
begin
if power(@x,3)+power(@y,3)+power(@z,3)=(@x*100+@y*10+@z)
begin
select @m=@x*100+@y*10+@z
print @m
end
set @z=@z+1
end
set @y=@y+1
end
set @x=@x+1
end
其输出结果与方法一相同
最后得到153,370,371,407为水仙花数
版权声明
本文为[osc_cx8uhydz]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4343506/blog/4708852
边栏推荐
- 图节点分类与消息传递 - 知乎
- Commodity management system -- implementation of local preservation of new commodities
- When iperf is installed under centos7, the solution of make: * no targets specified and no makefile found. Stop
- 失业日志 11月5日
- 财富自由梦缓?蚂蚁金服暂停上市,监管后估值或下跌
- C++之异常捕获和处理
- In 2020, what are the best tools for Android developers to break the cold winter?
- 捕获冒泡?难道浏览器是鱼吗?
- 20201108编程练习——练习3
- Bifrost 之 文件队列(一)
猜你喜欢
File queue in Bifrost (1)
How to do thread dump analysis in Windows Environment
From the practice, this paper discusses the problems caused by the inconsistent design of ruby syntax.
Unemployment log, November 5
1. What does the operating system do?
基于synchronized锁的深度解析
RabbitMQ脑裂问题解决方案调查
Android 解决setRequestedOrientation之后手机屏幕的旋转不触发onConfigurationChanged方法
Linked blocking queue based on linked list
App crashed inexplicably. At first, it thought it was the case of the name in the header. Finally, it was found that it was the fault of the container!
随机推荐
After Android solves the setrequested orientation, the rotation of the mobile phone screen does not trigger the onconfigurationchanged method
理解Task和和async await
When iperf is installed under centos7, the solution of make: * no targets specified and no makefile found. Stop
程序员的十年之痒
向北京集结!OpenI/O 2020启智开发者大会进入倒计时
Five indispensable open source tools for me
基于LabVIEW实现的几种滚动字幕
Linked blocking queue based on linked list
财富自由梦缓?蚂蚁金服暂停上市,监管后估值或下跌
RabbitMQ脑裂问题解决方案调查
亚马逊的无服务器总线EventBridge支持事件溯源 - AWS
Natural language processing (NLP) roadmap - KDnuggets
For the first time open CSDN, this article is for the past self and what is happening to you
Have you ever thought about why the transaction and refund have to be split into different tables
JT-day09
上周热点回顾(11.2-11.8)
How to reduce the resource consumption of istio agent through sidecar custom resource
典型分布式系统分析:Dynamo
Chrome浏览器引擎 Blink & V8
23 pictures, take you to the recommended system