这段代码在不同平台下编译后运行输出结果不一样!
pascal吧
全部回复
仅看楼主
level 5
PROGRAM EULER_PHI;
TYPE LINKED_PTR=^LINK_NODE;
LINK_NODE=RECORD
VALUE:INTEGER;
NEXT:LINKED_PTR;
END;
VAR N,M,I,R:INTEGER;VAR NODE,G:LINKED_PTR;
PROCEDURE PRINTING(PTR:LINKED_PTR);
VAR P:LINKED_PTR;
BEGIN
P:=PTR;
P:=P^.NEXT;
R:=R+1;
WRITE(' ',R,' ',P^.VALUE);
IF P^.NEXT=NIL THEN EXIT();
PRINTING(P);
FREEMEM(P,SIZEOF(LINKED_PTR));
END;
PROCEDURE SUCCESSOR(VAR PTR:LINKED_PTR);
VAR P:LINKED_PTR;
BEGIN
IF PTR^.NEXT=NIL THEN BEGIN
(*CREATE A NEW NODE AND LINK IT TO PREVIOUS ONE*)
PTR^.NEXT:=ALLOCMEM(SIZEOF(LINK_NODE));
END;
P:=PTR^.NEXT;PTR:=P;
END;
PROCEDURE ASSIGNMENT(PTR:LINKED_PTR;N:INTEGER);
VAR K:INTEGER;
BEGIN
FOR K:=2 TO N DO
BEGIN
SUCCESSOR(PTR);
END;
END;
PROCEDURE TRAVERSE_ELEMENTS(O:LINKED_PTR; VAR Q:LINKED_PTR;K:INTEGER);
VAR T:INTEGER;
BEGIN
FOR T:=2 TO K DO
BEGIN
SUCCESSOR(O);
END;
Q:=O;
END;
BEGIN
R:=1;
READLN(N);
NODE:=ALLOCMEM(SIZEOF(LINK_NODE));
NODE^.VALUE:=1;
ASSIGNMENT(NODE,N);
M:=2;
WHILE(M<=N) DO
BEGIN
TRAVERSE_ELEMENTS(NODE,G,M);
IF G^.VALUE=0 THEN BEGIN
I:=M;
WHILE(I<=N) DO
BEGIN
TRAVERSE_ELEMENTS(NODE,G,I);
IF G^.VALUE=0 THEN G^.VALUE:=I;
G^.VALUE:=(G^.VALUE DIV M)*(M-1);
I:=I+M;
END;
END;
M:=M+1;
END;
PRINTING(NODE);
READLN();
END.
在linux下时完全正确,windows下输出错误的结果。
2015年09月28日 13点09分 1
level 8

2015年09月28日 14点09分 2
1