1. 程式人生 > >PTA基礎程式設計題目集6-6求單鏈表結點的階乘和(函式題)

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求和。