PTA之求单链表结点的阶乘和

题目描述

本题要求实现一个函数,求单链表L结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int范围内。

时间限制: 400ms
内存限制: 64MB
代码长度限制: 16KB

函数接口定义:

int FactorialSum( List L );

其中单链表List的定义如下:

typedef struct Node *PtrToNode;
struct Node {
    int Data; /* 存储结点数据 */
    PtrToNode Next; /* 指向下一个结点的指针 */
};
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     return 0;
27 }
28 /* 你的代码将被嵌在这里 */

输入样例:

3

5 3 6

输出样例:

846

个人代码

思路:

简单粗暴,直接遍历整个list,并且在此过程中计算所有节点的阶乘的值,并相加

 1 int FactorialSum( List L )
 2 {
 3     List q=L;
 4     int j,x,sum = 0;
 5     while(q != NULL)
 6     {
 7         x=1;
 8         for(j=2;j <= q->Data; j++)
 9             x *= j;
10         sum+=x;
11         q = q->Next;
12     }
13     return sum;
14 }

 

posted on 2018-06-21 09:35  Arthurian  阅读(799)  评论(0编辑  收藏  举报