本题要求实现一个函数,求单链表L
结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int
范围内。
函数接口定义:
1 int FactorialSum( List L );
其中单链表List
的定义如下:
1 typedef struct Node *PtrToNode; 2 struct Node { 3 int Data; /* 存储结点数据 */ 4 PtrToNode Next; /* 指向下一个结点的指针 */ 5 }; 6 typedef PtrToNode List; /* 定义单链表类型 */
裁判测试程序样例:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct Node *PtrToNode; 5 struct Node { 6 int Data; /* 存储结点数据 */ 7 PtrToNode Next; /* 指向下一个结点的指针 */ 8 }; 9 typedef PtrToNode List; /* 定义单链表类型 */ 10 11 int FactorialSum( List L ); 12 13 int main() 14 { 15 int N, i; 16 List L, p; 17 18 scanf("%d", &N); 19 L = NULL; 20 for ( i=0; i<N; i++ ) { 21 p = (List)malloc(sizeof(struct Node)); 22 scanf("%d", &p->Data); 23 p->Next = L; L = p; 24 } 25 printf("%d\n", FactorialSum(L)); 26 27 return 0; 28 } 29 30 /* 你的代码将被嵌在这里 */
输入样例:
3
5 3 6
输出样例:
846
1 int FactorialSum( List L ) 2 { 3 int i; 4 int sum = 0; 5 while(L!=NULL) 6 { 7 int num = 1; 8 for(i=1;i<=L->Data;i++) 9 { 10 num=num*i; //求阶乘 11 } 12 sum+=num; //每一个结点阶乘的和 13 L=L->Next; //进行下一个结点的阶乘求和 14 15 } 16 return sum; 17 }
将链表的数据域比对成一个数组更好理解,L->Data就是一个具体数。用num作为阶乘,用sum求和。