6-6 求单链表结点的阶乘和【PAT】

做~自己de王妃 提交于 2020-01-24 07:09:00

题目:

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

函数接口定义:

int FactorialSum( List L );

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

typedef struct Node *PtrToNode;
struct Node
 {
    int Data; 						/* 存储结点数据 */
    PtrToNode Next; 			/* 指向下一个结点的指针 */

};
typedef PtrToNode List; /* 定义单链表类型 */
裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node *PtrToNode;
struct Node 
{
	int Data; /* 存储结点数据 */
	PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
int FactorialSum(List L);
int main()
{
	int N, i;
	List L, p;
	scanf("%d", &N);
	L = NULL;
	for (i = 0; i < N; i++) 
	{
		p = (List)malloc(sizeof(struct Node));
		scanf("%d", &p->Data);
		p->Next = L;  L = p;
	}
	printf("%d\n", FactorialSum(L));
	return 0;
}
/* 你的代码将被嵌在这里 */

输入样例:

3
5 3 6

输出样例:

846

思路:

  与数组相似,先初始化一个指针,把传入函数的指针赋值给它,方便操作,然后判断指针是否为空,如果为空直接返回0;计算所有节点的数字的阶乘,用一个变量来保存所有节点,直接返回该变量即可。
  注:0的阶乘为1

AC代码:

int FactorialSum(List L)
{
	int Sum = 0, i, sum;
	List p;
	if (L == NULL)			//如果链表为空直接返回0
		return 0;
	for (p = L; p != NULL; p = p->Next)
	{
		if (p->Data == 0)	//0的阶乘为1
			Sum += 1;
		else
		{
			for (sum = 1, i = p->Data; i > 0; i--)
				sum *= i;
			Sum += sum;
		}
	}
	return Sum;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!