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\n", FactorialSum(L));
26 
27     return 0;
28 }
29 
30 /* 你的代码将被嵌在这里 */
View Code

 

输入样例:

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\n",6*5*4*3*2*1);
26     printf("%d\n", 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     }
View Code

 

posted on 2018-03-30 11:46  yonyong  阅读(1102)  评论(0编辑  收藏  举报