6-6 求单链表结点的阶乘和(15 分)
本题要求实现一个函数,求单链表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
", FactorialSum(L));
26
27 return 0;
28 }
29
30 /* 你的代码将被嵌在这里 */
输入样例:
3
5 3 6
输出样例:
846
我的答案:
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
",6*5*4*3*2*1);
26 printf("%d
", FactorialSum(L));
27
28
29 return 0;
30 }
31 int FactorialSum( List L ){
32
33 int sum=0;
34 while(L)
35 {
36 sum+=fun(L->Data);
37 L=L->Next;
38 }
39 return sum;
40 }
41 int fun(int n){
42 while(n==1)
43 return 1;
44 while (n>1)
45 return fun(n-1)*n;
46 }