采用連結清單方式實作,linux GCC 編譯 ,理論上可以列印1-一個int長的楊輝三角,但是由于計算溢出,測試隻能到35行。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9QzVZtmTIpVdWdVY5plMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DOxgDOxcjM4EDNwUDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
#ifndef YANGHUI_H
#define YANGHUI_H
typedef struct Node{
int data;
struct Node *link;
}NODE;
#endif
#include <stdio.h>
#include <stdlib.h>
#include "YanghuiTriangle.h"
NODE *createSingleLink(NODE *head,int data)
{
NODE *h = head;
NODE *p = (NODE *)malloc(sizeof(NODE));
p->data = data;
p->link = NULL;
if(NULL == head)
{
h = p;
goto END;
}
while(NULL != head->link)
{
head = head->link;
}
head->link = p;
END: return h;
}
void PrintGap(int numGap)
{
int i = 0;
for(i = 0; i<numGap;i++)
printf(" ");
}
void Yanghui(int num)
{
int i = num;
int j = num;
NODE *head = NULL;
NODE *tmpHead = NULL;
for(i=num-1 ; i>=0 ; i--)
{
PrintGap(i);
for(j=0; j<(num-i); j++)
{
if(NULL != head)
{
if(0 != j)
{
if(NULL != head->link)
{
int tmp = (head->data)+(head->link->data);
printf("%d",tmp);
PrintGap(1);
head = head->link;
tmpHead = createSingleLink(tmpHead,tmp);
}
else
{
printf("%d",head->data);
tmpHead = createSingleLink(tmpHead,head->data);
head = head->link;
head = tmpHead;
tmpHead = NULL;
}
}
else if(0==j)
{
printf("%d",1);
PrintGap(1);
tmpHead = createSingleLink(tmpHead,1);
}
}
else if(NULL == head)
{
printf("%d",1);
head = createSingleLink(head,1);
}
}
printf("\n");
}
NODE *frr =NULL;
while(NULL !=head)
{
frr = head;
head = head->link;
free(frr);
}
while(NULL !=tmpHead)
{
frr = tmpHead;
tmpHead = tmpHead->link;
free(frr);
}
}
void main(int argc,char *argv[])
{
if(argc<2)
{
printf("Usage:\n./a.out num\n");
exit(0);
}
int num = atoi(argv[1]);
Yanghui(num);
//printf("the input num : %d\n",num);
}