PTA基础编程题目集6-6求单链表结点的阶乘和(函数题)

本题要求实现一个函数,求单链表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求和。

猜你喜欢

转载自www.cnblogs.com/pxy-1999/p/10255529.html