Code:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node *PtrToNode;
struct Node {
int Data;
PtrToNode Next;
};
typedef PtrToNode List;
int FactorialSum( List L );
int main()
{
int N, i;
List L, p;
scanf("%d", &N);
L = NULL;
for ( i=0; i<N; i++ ) {
p = (List)malloc(sizeof(struct Node));
scanf("%d", &p->Data);
p->Next = L; L = p;
}
printf("%d\n", FactorialSum(L));
return 0;
}
int FactorialSum( List L ) { //factorial —— adj. 阶乘的
PtrToNode p; //用上述的结点的数据结构PtrToNode定义一个指针p,因为PtrToNode已经带*了,所以这里的p不用带*.
int sum = 0, item, i; //PtrToNode p; 相当于 struct Node *p; 注意要带struct!!
for( p=L; p; p=p->Next ) { //p指向头结点L,遍历链表。
item = 1; //注意每轮都要把item重新置1.
for( i=p->Data; i>0; i-- )
item = item * i;
sum += item;
}
return sum;
}