我得到的輸出為 a = 1。我從 1 到 500 進行了 for 回圈,在外部 for 回圈內進行了 while 回圈。
declare
n number;
s number:=0;
r number;
len number;
m number;
begin
for a in 1..500 loop
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;
uj5u.com熱心網友回復:
這個怎么樣?
substr拆分i為 3 個單獨的數字nvl在這里是為了避免null在這些數字不存在的情況下增加價值(還)
power函式計算i的立方體- 顯示
i是否等于r(作為“結果”)
SQL> declare
2 r number;
3 begin
4 for i in 1 .. 500 loop
5 r := power(to_number(substr(to_char(i), 1, 1)), 3)
6 nvl(power(to_number(substr(to_char(i), 2, 1)), 3), 0)
7 nvl(power(to_number(substr(to_char(i), 3, 1)), 3), 0);
8
9 if r = i then
10 dbms_output.put_line(i);
11 end if;
12 end loop;
13 end;
14 /
1
153
370
371
407
PL/SQL procedure successfully completed.
SQL>
uj5u.com熱心網友回復:
您永遠不會重置s,也不需要最終IF陳述句(除非您只對等于原始數字的阿姆斯特朗數感興趣):
declare
n number;
s number:=0;
r number;
len number;
m number;
begin
for a in 1..500 loop
m:=a;
n:=a;
s:=0; -- Reset s for each loop
len:=length(to_char(n));
while(n>0) loop
r:=mod(n,10);
s:=s power(r,len);
n:=trunc(n/10);
end loop;
dbms_output.put_line(a || '=' || s); -- Output values for every loop.
end loop;
end;
/
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/356383.html
