PAT基礎程式設計題目集——6-6 求單鏈表結點的階乘和
阿新 • • 發佈:2018-11-24
原題目:
本題要求實現一個函式,求單鏈表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
分析:
1.根據題目已知資訊,可以看出只要 L!=NULL 即連結串列不為空,因為有要求每個值的階乘,最後求和,故採用雙層FOR迴圈,第一層,迴圈連結串列,第二層,迴圈階乘的計算,將每求得的階乘求和儲存。
程式碼:
int FactorialSum( List L ) { // int i,j=0,k; for(;L!=NULL;L=L->Next) { for(i=1,k=1;i<=L->Data;i++) { k=k*i; } j+=k; } return j; }