You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Oracle SQL编写阿姆斯特朗数判断查询?

纯Oracle SQL判断阿姆斯特朗数的解决方案

阿姆斯特朗数(也叫自恋数)的定义是:一个n位数字,其每个位上的数字的n次幂之和等于它本身(例如153 = 1³ + 5³ + 3³)。以下是纯Oracle SQL的实现方案:

1. 单个数字的判断查询

直接替换示例中的153为你需要判断的数字即可:

WITH num_details AS (
    SELECT 
        153 AS original_num,
        LENGTH(TO_CHAR(153)) AS digit_count,
        REGEXP_SUBSTR(TO_CHAR(153), '\d', 1, LEVEL) AS single_digit
    FROM dual
    CONNECT BY LEVEL <= LENGTH(TO_CHAR(153))
)
SELECT 
    original_num,
    CASE 
        WHEN SUM(POWER(TO_NUMBER(single_digit), digit_count)) = original_num 
        THEN '是阿姆斯特朗数' 
        ELSE '不是阿姆斯特朗数' 
    END AS is_armstrong
FROM num_details
GROUP BY original_num, digit_count;

逻辑说明

  • num_details临时数据集:拆分目标数字的每一位,同时记录原数字和它的位数
  • 聚合计算每一位数字的digit_count次幂之和,与原数字对比后返回判断结果

2. 通用绑定变量版(方便动态输入)

使用绑定变量:input_num,可以在执行时动态传入要判断的数字:

WITH num_details AS (
    SELECT 
        :input_num AS original_num,
        LENGTH(TO_CHAR(:input_num)) AS digit_count,
        REGEXP_SUBSTR(TO_CHAR(:input_num), '\d', 1, LEVEL) AS single_digit
    FROM dual
    CONNECT BY LEVEL <= LENGTH(TO_CHAR(:input_num))
)
SELECT 
    original_num,
    CASE 
        WHEN SUM(POWER(TO_NUMBER(single_digit), digit_count)) = original_num 
        THEN '是阿姆斯特朗数' 
        ELSE '不是阿姆斯特朗数' 
    END AS is_armstrong
FROM num_details
GROUP BY original_num, digit_count;

3. 查询指定范围内的所有阿姆斯特朗数

以查询1到10000之间的阿姆斯特朗数为例:

WITH numbers AS (
    SELECT LEVEL AS num
    FROM dual
    CONNECT BY LEVEL <= 10000
),
num_details AS (
    SELECT 
        num,
        LENGTH(TO_CHAR(num)) AS digit_count,
        REGEXP_SUBSTR(TO_CHAR(num), '\d', 1, LEVEL) AS single_digit
    FROM numbers
    CONNECT BY LEVEL <= LENGTH(TO_CHAR(num))
        AND PRIOR num = num
        AND PRIOR SYS_GUID() IS NOT NULL -- 避免层级循环
)
SELECT DISTINCT num AS armstrong_number
FROM num_details
GROUP BY num, digit_count
HAVING SUM(POWER(TO_NUMBER(single_digit), digit_count)) = num
ORDER BY num;

注意点

  • PRIOR SYS_GUID() IS NOT NULL用于防止CONNECT BY时出现循环,确保每个数字的拆分层级独立

内容的提问来源于stack exchange,提问作者Tural Hüseynov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:17:29