PTA 6-2 求单链表结点的阶乘和 &&一点小问题

PTA 6-2 求单链表结点的阶乘和

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

函数接口定义:

int FactorialSum( List L );

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

typedef struct Node PtrToNode;
struct Node {
int Data; /
存储结点数据 /
PtrToNode Next; /
指向下一个结点的指针 /
};
typedef PtrToNode List; /
定义单链表类型 */

裁判测试程序样例:

#include 
#include 

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

以下是代码


int FactorialSum(List L)
{
    int num=1, j,sum=0;
	while(L!=NULL)
		{
		   for (j = 1,num=1; j <= L->Data; j++)
		    {
			    num=num*j;
		    }
           sum=sum+num;
		   L=L->Next;
		}
	return sum;
}

开始我用外面for循环和数组存放每个阶乘,导致最后一个测试点段错误
后来将数组改为数累加,依旧错误
最后while循环,通过。

很好奇为什么while就可以通过  到处查了查,发现都说在开启优化编译情况下,两者并无区别,一样快…
这个问题存档。以后看看能不能明白。
—————————————————————————————
时间过去两个小时,后面又有一道题段错误,发现是忘了判断输入范围之外的数,我想是不是这个也是某个条件未判定顺利。。。
看来并不是 while 和 for 的区别。

你可能感兴趣的:(链表,指针,单链表)