PL/SQL实现1-500阿姆斯特朗数生成及代码问题排查
PL/SQL 生成1-500范围内阿姆斯特朗数的修复方案
原代码错误原因
- 累加和变量
s未在每次外层循环开始时重置:原代码仅在声明阶段初始化s=0,计算完第一个数字后s的结果会累积到后续所有数字的计算中,导致判断逻辑完全失效 - 输出语句存在语法错误:
dbms_output.put_line('a='||to_char(a)');中to_char(a)后多了一个冗余单引号,会触发编译报错
修正后可运行代码
declare n number; s number; r number; len number; m number; begin for a in 1..500 loop -- 每次计算新数字前重置累加和 s := 0; m := a; n := a; len := length(to_char(n)); while n > 0 loop r := mod(n, 10); s := s + power(r, len); n := trunc(n / 10); end loop; if m = s then dbms_output.put_line('a=' || to_char(a)); end if; end loop; end; /
运行输出结果
a=1 a=2 a=3 a=4 a=5 a=6 a=7 a=8 a=9 a=153 a=370 a=371 a=407
内容的提问来源于stack exchange,提问作者Midas
相关产品推荐
相关产品推荐

