6-6 求单链表结点的阶乘和 (15 分)
1. 题目摘自
https://pintia.cn/problem-sets/14/problems/738
2. 题目内容
本题要求实现一个函数,求单链表L结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int范围内。
函数接口定义:
int FactorialSum( List L );
其中单链表List的定义如下:
typedef struct Node PtrToNode;
struct Node {
int Data; / 存储结点数据 /
PtrToNode Next; / 指向下一个结点的指针 /
};
typedef PtrToNode List; / 定义单链表类型 */
输入样例:
3
5 3 6
输出样例:
846
3. 源码参考
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct Node *PtrToNode;
struct Node {
int Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
int FactorialSum( List L );
int fact(int n);
int main()
{
int N, i;
List L, p;
cin >> N;
L = NULL;
for ( i=0; i<N; i++ )
{
p = (List)malloc(sizeof(struct Node));
cin >> p->Data;
p->Next = L;
L = p;
}
cout << FactorialSum(L) << endl;
return 0;
}
int FactorialSum( List L )
{
int s;
s = 0;
while (L)
{
s += fact(L->Data);
L = L->Next;
}
return s;
}
int fact(int n)
{
int s;
s = 1;
for(int i = 1; i <= n; i++)
{
s *= i;
}
return s;
}
网友评论