日期:2014-05-17  浏览次数:20765 次

有点问题 请大家帮忙
老是运行结果不对?????????????????


--分别用三种循环语句找出所有的水仙花数(所谓的水仙花数是指一个三位数,
--它的各位数字的立方和等于它本身,如153=1*1*1+5*5*5+3*3*3 )
DECLARE 
A INTEGER;
B INTEGER ;
C INTEGER ; 
BEGIN
FOR I IN 100..999 LOOP
A := I/100;
B := (I-A*100)/10;
C := I-A*100-B*10;
IF A*A*A+B*B*B+C*C*C=I
THEN DBMS_OUTPUT.put_line(I);
END IF;
--DBMS_OUTPUT.put_line(A);
--DBMS_OUTPUT.put_line(B);
--DBMS_OUTPUT.put_line(C);
END LOOP;
END;

------解决方案--------------------
DECLARE
A INTEGER;
B INTEGER ;
C INTEGER ;
BEGIN
FOR I IN 100..999
LOOP
A := I /100;
B := (I-A*100)/10;
C := I -A*100-B*10;
IF (A*A*A+B*B*B+C*C*C=I) THEN
DBMS_OUTPUT.put_line(I);
END IF;
--DBMS_OUTPUT.put_line(A);
--DBMS_OUTPUT.put_line(B);
--DBMS_OUTPUT.put_line(C);
END LOOP;
END;

--结果
963
999
------解决方案--------------------
--楼主的截断错了吧
DECLARE
A INTEGER;
B INTEGER ;
C INTEGER ;
BEGIN
FOR I IN 100..999
LOOP
A := to_number(substr(i,1,1));
B := to_number(substr(i,2,1));
C := to_number(substr(i,3,1));
IF (A*A*A+B*B*B+C*C*C=I) THEN
DBMS_OUTPUT.put_line(I);
DBMS_OUTPUT.put_line(A);
DBMS_OUTPUT.put_line(B);
DBMS_OUTPUT.put_line(C);
END IF;

END LOOP;
END;

--结果
153
1
5
3
370
3
7
0
371
3
7
1
407
4
0
7

------解决方案--------------------
需要把小数去掉的哦~
DECLARE
A NUMBER(1);
B NUMBER(1);
C NUMBER(1);
BEGIN
FOR I IN 100..999 LOOP
A := TRUNC(I/100);
B := CASE WHEN (I-A*100)>9 THEN TRUNC((I-A*100)/10) ELSE 0 END;
C := MOD(I,10);
IF POWER(A,3)+POWER(B,3)+POWER(C,3)=I
THEN DBMS_OUTPUT.PUT_LINE(I);
END IF;
--DBMS_OUTPUT.PUT_LINE(A);
--DBMS_OUTPUT.PUT_LINE(B);
--DBMS_OUTPUT.PUT_LINE(C);
END LOOP;
END;