来用SQL语句算最大公约数了 分不多 就100...!

yhui1989love 2011-11-13 11:12:45
请用SQL语句求下列两个数的最大公约数:::


4294967294 3465465468

...全文
708 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhui1989love 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 roy_88 的回复:]
是更新不是新增

SQL code

update GCD_LCM
set gcd=dbo.GetGys (a,b),lcm=dbo.GetGbs(a,b)
[/Quote]

悲剧啊 为什么就给写成insert into鸟 ....
update后没有问题
中国风 2011-11-14
  • 打赏
  • 举报
回复
是更新不是新增
update  GCD_LCM
set gcd=dbo.GetGys (a,b),lcm=dbo.GetGbs(a,b)
yhui1989love 2011-11-14
  • 打赏
  • 举报
回复
ID a b GCD LCM
1 6 100 null null
2 9 93 null null
3 12 86 null null
4 15 79 null null
GCD和LCM插入对应的数 怎么写捏
INSERT INTO GCD_LCM (gcd,lcm)  SELECT dbo.GetGys (a,b),dbo.GetGbs(a,b) FROM GCD_LCM

语法分析没有错 但是执行不过去 !!!
中国风 2011-11-14
  • 打赏
  • 举报
回复
GO
Create FUNCTION fn_num(@a BIGINT,@b BIGINT)
RETURNS BIGINT
AS
BEGIN
DECLARE @c BIGINT
SET @c=@a%@b
WHILE @c>0
select @a=@b,@b=@c,@c=@a%@b
RETURN @b
END
GO

SELECT dbo.fn_num(4294967294,3465465468)
中国风 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yhui1989love 的回复:]

引用 6 楼 roy_88 的回复:
SQL code

DECLARE @a bigint,@b bigint,@c bigint
SET @a=4294967294
SET @b=3465465468
SET @c=@a%@b
WHILE @c>0
select @a=@b,@b=@c,@c=@a%@b
SELECT @b

你这个要是算两个列捏?
[/Quote]

寫成一個函數就行了
yhui1989love 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xiaolinyouni 的回复:]
查了一下,4294967295是.net上最大整数存储类型UInteger的上限.
超过了这个值,我真不知道如何写了.
sql中bigint的上限是2^63-1,我表示很强大...
如果
.net写法

VB.NET code

Dim a As UInteger = 4294967294
Dim b As UInteger = 346546546……
[/Quote]
搜噶 这两个数字不是我随便输入的哦!
如果数据库中就是有两列数字 需要求他们的最大公约数和最小公倍数 然后插入到新列中
怎么办?
并不是两个数 是两列!
苦苦的潜行者 2011-11-14
  • 打赏
  • 举报
回复
查了一下,4294967295是.net上最大整数存储类型UInteger的上限.
超过了这个值,我真不知道如何写了.
sql中bigint的上限是2^63-1,我表示很强大...
如果
.net写法
        Dim a As UInteger = 4294967294
Dim b As UInteger = 3465465468
Dim c As UInteger
Do
c = a Mod b
If c = 0 Then Exit Do
a = b
b = c
Loop While c >= 1
MsgBox(b)
'结果b=2
q465897859 2011-11-14
  • 打赏
  • 举报
回复
学习
yhui1989love 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 roy_88 的回复:]
SQL code

DECLARE @a bigint,@b bigint,@c bigint
SET @a=4294967294
SET @b=3465465468
SET @c=@a%@b
WHILE @c>0
select @a=@b,@b=@c,@c=@a%@b
SELECT @b
[/Quote]
你这个要是算两个列捏?
苦苦的潜行者 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 roy_88 的回复:]

SQL code
DECLARE @a bigint,@b bigint,@c bigint
SET @a=4294967294
SET @b=3465465468
SET @c=@a%@b
WHILE @c>0
select @a=@b,@b=@c,@c=@a%@b
SELECT @b
[/Quote]

膜拜!
  • 打赏
  • 举报
回复
辗转相除法。这么大的数使用biggint,如果数据再更大的话,是天文数字的画,那就麻烦了
yhui1989love 2011-11-14
  • 打赏
  • 举报
回复
/*求两个数的最大公约数*/
CREATE FUNCTION f_GetGys(@num1 BIGINT,@num2 BIGINT)
RETURNS BIGINT
AS
BEGIN
DECLARE @m BIGINT
DECLARE @i BIGINT
if(@num1<@num2)--确保@num1永远是大的 @num2永远是小的
BEGIN
SET @m = @num2
SET @num2 = @num1
SET @num1 = @m
END
SET @i=@num1%@num2
WHILE @i>0
BEGIN
select @num1=@num2,@num2=@i,@i=@num1%@num2
END
RETURN @num2
END
GO
/*求两个数的最小公倍数(调用了最大公约数函数,也可以直接写进去)*/
ALTER FUNCTION f_GetGbs(@num1 BIGINT,@num2 BIGINT)
RETURNS BIGINT
AS
BEGIN
DECLARE @a BIGINT
DECLARE @b BIGINT
DECLARE @c BIGINT
DECLARE @d BIGINT
SET @a = @num1
SET @b = @num2
SET @c = dbo.f_GetGys (@num1,@num2)
SET @d = @a*@b/@c
RETURN @d
END
GO

整理了下 以上是比较满意的答案了 编程语言是这种算法 SQL也可以...
感谢csdn 感谢 中國風 感谢F妹
不过F妹子那个是哪里搞来的 臭婆娘的裹脚啊 效率还很差
结贴 给分鸟 F姐 我总给你分 你是不是也给我点儿啊!!!!!
w556667788 2011-11-14
  • 打赏
  • 举报
回复
高,写的不错。我转载了,哈哈
快溜 2011-11-13
  • 打赏
  • 举报
回复
消遣题
中国风 2011-11-13
  • 打赏
  • 举报
回复
公约数为2
中国风 2011-11-13
  • 打赏
  • 举报
回复
DECLARE @a bigint,@b bigint,@c bigint
SET @a=4294967294
SET @b=3465465468
SET @c=@a%@b
WHILE @c>0
select @a=@b,@b=@c,@c=@a%@b
SELECT @b
chuanzhang5687 2011-11-13
  • 打赏
  • 举报
回复
create function GetGys(@num1 int,@num2 int)
returns int --返回值
as
begin
declare @times int --计数器
declare @min int --存储两个数的较小者
declare @result int --保存结果
if(@num1>=@num2)
set @min=@num2
else
set @min=@num1
set @times=@min
while(@times<=@min) --循环
begin
if(@num1%@times=0 and @num2%@times=0)
begin
set @result=@times
break
end
set @times=@times-1
end
return @result
end
--你这两个书的公因数太大,溢出
--小F-- 2011-11-13
  • 打赏
  • 举报
回复
/*求两个数的最大公约数*/
create function GetGys(@num1 int,@num2 int)
returns int --返回值
as
begin
declare @times int --计数器
declare @min int --存储两个数的较小者
declare @result int --保存结果
if(@num1>=@num2)
set @min=@num2
else
set @min=@num1
set @times=@min
while(@times<=@min) --循环
begin
if(@num1%@times=0 and @num2%@times=0)
begin
set @result=@times
break
end
set @times=@times-1
end
return @result
end


/*求两个数的最小公倍数*/
create function GetGbs(@num1 int,@num2 int)
returns int
as
begin
declare @result int --结果
declare @max int --保存两个数的大者
declare @times int
if @num1<=@num2
set @max=@num2
else
set @max=@num1
set @times=@max
while(@times>=@max)
begin
if(@times%@num1=0 and @times%@num2=0)
begin
set @result=@times
break
end
set @times=@times+1
end
return @result
end

最后测试:
运行
select dbo.GetGys(15,20) as 最大公约数,dbo.GetGbs(15,20) as 最小公倍数

显示结果:
最大公约数 最小公倍数
5 60赞同23| 评论
叶子 2011-11-13
  • 打赏
  • 举报
回复
最大公约数是2
chuanzhang5687 2011-11-13
  • 打赏
  • 举报
回复
楼下的 板凳我站鸟 碎觉去 明儿看各位大牛滴答案!!!!!!!!
加载更多回复(1)
第一篇 面试题 ................................................................................ 8 1.1. 简介 ............................................................................................................... 8 1.2. 面试题集合(一) .......................................................................................... 8 1.2.1. 把二元查找树转变成排序的双向链表.................................................... 8 1.2.2. 下排每个数都是先前上排那十个数在下排出现的次数 ..........................11 1.2.3. 设计包含 min 函数的栈 ...................................................................... 14 1.2.4. 求子数组的最大和.............................................................................. 20 1.2.5. 在二元树中找出和为某一值的所有路径 .............................................. 22 1.2.6. Top K 法详细解析---百度面试 ......................................................... 29 1.2.7. 翻转句子中单词的顺序....................................................................... 31 1.2.8. 判断整数序列是不是二元查找树的后序遍历结果 ................................ 33 1.2.9. 查找最小的 K 个元素-使用最大堆....................................................... 35 1.2.10. 求二叉树中节点的最大距离................................................................ 37 1.3. 面试题集合(二) ........................................................................................ 40 1.3.1. 求 1+2+…+n....................................................................................... 40 1.3.2. 输入一个单向链表,输出该链表中倒数第 k 个结点............................. 44 1.3.3. 输入一个已经按升序排序过的数组和一个数字.................................... 46 1.3.4. 输入一颗二元查找树,将该树转换为它的镜像.................................... 48 1.3.5. 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往 右的顺序打印................................................................................................... 49 1.3.6. 在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b 52 1.3.7. n 个数字(0,1,…,n-1)形成一个圆圈 .................................................. 53 1.3.8. 定义 Fibonacci 数列 ............................................................................ 58 1.3.9. 左移递减数列查找某一个数.........................................

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧