跪求大神帮我看一下c语言代码哪里错了,求大整数加法,要求用线性表做

2024-12-22 20:19:08
推荐回答(2个)
回答1:

主要是多出for循环你直接在for(...)后面加了分号。还有
c->element[i-1]=(char)(c->element[i-1]-'10');
c->element[i-2]=(char)(c->element[i-2]+'1');
这两句减去的应该是数字而不是字符
另外我还帮你增加了在最高位产生进位的处理
修改程序如下:
#include
#include
#include
#define MAX 200
struct seqlist
{
int n;
char *element; /*存放线性表中元素*/
};
typedef struct seqlist * pseqlist;
pseqlist createnulllist_seq(int n) /*定义创建空顺序表函数*/
{
pseqlist palist = (pseqlist)malloc(sizeof(struct seqlist));
if(palist!=NULL)
{
palist->element =(char*)malloc(sizeof(char)*MAX);
if (palist->element)
{
palist->n = 0;
return (palist);
}
else free(palist);
}
printf("OUT of space!\n");
return NULL;
}
int isnulllist(pseqlist palist) /*判断线性表是否为空*/
{
return (palist -> n == 0);
}
int insert(pseqlist palist, char x) /*在顺序表末尾插入元素*/
{
int q;
if (palist->n >= MAX)
{
printf("Overflow!\n");
return (0);
}
if (isnulllist(palist))
{
palist->element[0]=x;
palist->n=1;
return (1);
}
q=palist->n;
palist->element[q]=x;
palist->n+=1;
return (1);
}
void add(pseqlist a,pseqlist b) /*定义加法函数*/
{
pseqlist c,d;
c=createnulllist_seq(0);
d=createnulllist_seq(0);
int i,s,l;
int la,lb;
la=a->n;
lb=b->n;
if (la{
s=la;
l=lb;
for (i=0;i{
insert(d,b->element[i]);
}
}
else
{
s=lb;
l=la;
for (i=0;i{
insert(d,a->element[i]);
}
}
for (i=0;i{
insert(c,d->element[i]);
}
for (i=l-s;i{
insert(c,(char)((a->element[i]-'0')+(b->element[i-l+s]-'0')+'0'));
}
for (i=l;i>1;i--)
{
if ((c->element[i-1])>'9') /*如果所加之数大于9,该数减10,前一位加1*/
{
c->element[i-1]=(char)(c->element[i-1]-10);
c->element[i-2]=(char)(c->element[i-2]+1);
}
}
c->element[l]='\0';
printf("The total is:\n");
if ((c->element[0])>'9')
{
c->element[0] = c->element[0]-10;
printf("1%s \n", c->element);
}
else
{
printf("%s \n",c->element);
}
}
void main()
{
pseqlist a,b;
pseqlist c;
char sa[MAX],sb[MAX];
int s,i;
a=createnulllist_seq(MAX);
b=createnulllist_seq(MAX);
c=createnulllist_seq(MAX);
printf("please input the huge number a=\n"); /*输入a*/
scanf("%s",sa);
if (a!= NULL)
{
s=strlen(sa);
for (i=0;i{
insert(a,sa[i]);
}
a->element[s]='\0';
}
printf("please input the huge number b=\n"); /*输入b*/
scanf("%s",sb);
if (b!= NULL)
{
s=strlen(sb);
for (i=0;i{
insert(b,sb[i]);
}
b->element[s]='\0';
}
add(a,b);
return ;
}

回答2:

有这么麻烦么。。还一定要用struct来写?