老是运行结果不对?????????????????
--分别用三种循环语句找出所有的水仙花数(所谓的水仙花数是指一个三位数,
--它的各位数字的立方和等于它本身,如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;

解决方案 »

  1.   

    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
      

  2.   

    --楼主的截断错了吧
    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
      

  3.   

    需要把小数去掉的哦~
    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;