- BigIntadd.c
- 运行结果示例
【TDTX】
【注1】作两正整数相加时,不用输入“+”号;作两负整数相加时,需要都输入“-”号。
【注2】可通过调整字符数组a、b的大小,增大或减小作加法运算的位数。
【注3】使用单链表,采用头插法保存结果的数字。因先是低位作加法,故要在最后输出,则采用头插法。 BigIntadd.c
#include#include #include struct result_node { char ch; struct result_node* next; }; int tonum(char n) { return n-'0'; } int main() { int n,m; int jw=0; int i,j; int vi,vj,vii,vjj;//vi、vj指示非零数字起点位置 int svii=0,svjj=0;//svii、svjj指示符号的位置 struct result_node* head,*p; struct result_node* q; struct result_node* t; char a[100],b[100];//支持最多一百位两个同符号数相加,可通过修改数组长度,更改运算范围 printf("n输入第一个整数:"); scanf("%s",a); printf("n输入第二个整数:"); scanf("%s",b); head = (struct result_node*)malloc(sizeof(struct result_node));//创建头结点 p=head;//让移动指针初始化指向头结点 head->ch='p';//将头结点数据域赋值'p' head->next=NULL;//头结点指针域置空 for(i=0;i ='1'&&a[i]<='9') { vi=i; break; } }//找到数字起点与符号位置(如果有),过滤0前缀与符号 for(j=0;j ='1'&&b[j]<='9') { vj=j; break; } }//找到数字起点与符号位置(如果有),过滤0前缀与符号 for(jw=0,i=strlen(a)-1,j=strlen(b)-1;i>=vi && j>=vj;i--,j--) { if( jw+tonum(a[i])+tonum(b[j]) <=9 ) { q = (struct result_node*)malloc(sizeof(struct result_node)); q->ch= (jw+tonum(a[i])+tonum(b[j]))+'0'; //printf("q:%cn",q->ch); q->next=p->next; head->next=q;//头插法建立结果数的链表 p=head; //printf("%dn",jw+tonum(a[i])+tonum(b[j])); jw=0; } else { q = (struct result_node*)malloc(sizeof(struct result_node)); q->ch= (jw+tonum(a[i])+tonum(b[j]))%10+'0'; //printf("q:%cn",q->ch); q->next=p->next; head->next=q;//头插法建立结果数的链表 p=head; //printf("%dn",(jw+tonum(a[i])+tonum(b[j]) )%10); jw=1; } } if(i =vj) { for(;j>=vj;j--) { if( jw+tonum(b[j]) <=9 ) { q = (struct result_node*)malloc(sizeof(struct result_node)); q->ch= (jw+tonum(b[j]))+'0'; //printf("q:%cn",q->ch); q->next=p->next; head->next=q;//头插法建立结果数的链表 p=head; //printf("%dn",jw+tonum(b[j])); jw=0; } else { q = (struct result_node*)malloc(sizeof(struct result_node)); q->ch= (jw+tonum(b[j]))%10+'0'; //printf("q:%cn",q->ch); q->next=p->next; head->next=q;//头插法建立结果数的链表 p=head; //printf("%dn",(jw+tonum(b[j]) )%10); jw=1; } } printf("n(%s)+(%s)=",&a[vii],&b[vjj]); if(a[vii]=='-'&&b[vjj]=='-') { printf("-"); } if(jw==1) { printf("1"); } p=head->next; while(p!=NULL) { printf("%c",p->ch); p=p->next; } p=head; t=p->next; while(t!=NULL) { free(p); p=t; t=p->next; } p=NULL; head=NULL; t=NULL; q=NULL; return 0; } if(j =vi) { for(;i>=vi;i--) { if( jw+tonum(a[i]) <=9 ) { q = (struct result_node*)malloc(sizeof(struct result_node)); q->ch= (jw+tonum(a[i]))+'0'; //printf("q:%cn",q->ch); q->next=p->next; head->next=q;//头插法建立结果数的链表 p=head; //printf("%dn",jw+tonum(a[i])); jw=0; } else { q = (struct result_node*)malloc(sizeof(struct result_node)); q->ch= (jw+tonum(a[i]))%10+'0'; //printf("q:%cn",q->ch); q->next=p->next; head->next=q;//头插法建立结果数的链表 p=head; //printf("%dn",(jw+tonum(a[i]) )%10); jw=1; } } printf("n(%s)+(%s)=",&a[vii],&b[vjj]); if(a[vii]=='-'&&b[vjj]=='-') { printf("-"); } if(jw==1) { printf("1"); } p=head->next; while(p!=NULL) { printf("%c",p->ch); p=p->next; } p=head; t=p->next; while(t!=NULL) { free(p); p=t; t=p->next; } head=NULL; t=NULL; p=NULL; q=NULL; return 0; } printf("n(%s)+(%s)=",&a[vii],&b[vjj]); if(a[vii]=='-'&&b[vjj]=='-') { printf("-"); } if(jw==1) { printf("1"); } p=head->next; while(p!=NULL) { printf("%c",p->ch); p=p->next; } p=head; t=p->next; while(t!=NULL) { free(p); p=t; t=p->next; } head=NULL; t=NULL; p=NULL; q=NULL; return 0; }
运行结果示例
------------------------------------------------------第三次发项目类文章有点激动啊!-----------------------------------------------------
-----------------------------------------------------【C语言—微项目—自编练习】------------------------------------------------------
----------------------------------------------------------------【TDTX】-----------------------------------------------------------------



