ITPub博客

首页 > 数据库 > Oracle > 两数相乘

两数相乘

原创 Oracle 作者:peter1166 时间:2016-05-26 14:51:52 0 删除 编辑

今天看到个SW测试题目,看到同事们用Java写,我也写了个SQL的,题如下;

 


-----------------------------------------------------------------

由两个正整数相乘组成序列。例如,4和20两个数。通过相乘可得到的结果,按由小到大的顺序排列,则得到 4, 4*4, 20, 4*4*4, 4*20... 序列。再例如5和7两个数,则会得到5, 7, 5*5, 5*7, ...序列。假如2和100两个数字,序列结果为2, 22, 23, 24, 25, 26, 100, 27, 2*100, 28, ... 序列中第十个小的数是28=256。

相乘所得序列会出现重复值。例如,2和4两个数时其序列为2, 22, 4, 2*4, 23, ... 但实际上22 和4是相同,而且2*4和 23  也相同。这种情况只视为一个值。即,这种情况序列的值应该是2, 4, 8, 16, 32, ...去掉重复的值,序列中第五个小的值是32而非8。

编写程序实现由两个正整数相乘所得序列中,找出第十个小的数。第十个小的数不应该溢出整数型范围.(不超过231-1)


-----------------------------------------------------------------







WITH T AS (
SELECT 2 N FROM DUAL UNION
SELECT 7 N FROM DUAL
)
,T1 (A,N) AS (
SELECT 1,N FROM T
UNION ALL
SELECT T1.A+1,T1.N*T.N
FROM T1,T
WHERE T1.A+1 < 10
)
SELECT DISTINCT N
FROM (
SELECT  T1.N ,DENSE_RANK()OVER(ORDER BY T1.N) RN
FROM T1
)
WHERE RN <= 10
;

         N
----------
         2
         4
         7
         8
        14
        16
        28
        32
        49
        56
10 rows selected

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13696961/viewspace-2107372/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MERGE JOIN CARTESIAN
下一篇: AWR
请登录后发表评论 登录
全部评论

注册时间:2015-06-26

  • 博文量
    10
  • 访问量
    14396