用单链表实现大整数的加法(C语言描述)

两个大整数不超过200位。目前我建立了两个单链表用来存放两个大整数,每一位数字用字符表示。请问如何才能实现各数位的相加?尚未入门,请高手们尽量通俗表述。急求。谢谢~

这么给你说吧。你先定义一个数组a[200];
然后把2个列表从最后依次相加,并将结果存在数组里。然后判断数组的每一个元素,如果大于9,则该元素减去10,并下一位加上1,。一直到最后,然后将数组倒着输出就是这个数的值了。
满意请采纳!追问

那用单链表怎么实现呢?

追答

这个,这样吧,你应该会将链表的每一个元素提取出来并将值保存到数组里吧。
比如:现在你已经提取出来了2个链表里的所有值。并存到a[200],b[200]里,然后,从最后加起来,在判断大于9,然后就是得了。
比如:第一个存的是'2','5','8',第二个存的是'5','8','9','4','7',加起来就是'5','8','11','9','15',消去大于9的就是'5','9','2','0','5'.最后判断第一个是否大于9,如果大于9就在最前面添加1,否则结果就是这个数。然后输出这个数组的值就可以了。

追问

也就是说,其实还是用数组解决问题,和链表没什么关系?

追答

你要是像用链表也是可以实现的啊,数组不就是相当于连标的一种特殊的存在啊

追问

谢谢。我知道用数组怎么解决问题。但是最近数据结构课上在讲线性表,所以想用线性表的一般方法做。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-12
#include<stdio.h>
#include<string.h>
int main()
{
int i,t,j=1,n,len,k;
char sum[1009],sa[1009],sb[1009];
scanf("%d",&t);
getchar();
while(t--)
{
for(i=0;i<1009;i++)
sum[i]='0';
scanf("%s%s",sa,sb);
len=strlen(sa);
for(i=len-1,k=0;i>=0;i--,k++)
{
sum[k]=sum[k]-'0'+sa[i];
n=k;
while(sum[n]>'9')
{
sum[n+1]=sum[n+1]+(sum[n]-'0')/10;
sum[n]=(sum[n]-'0')%10+'0';
n++;
}
}
len=strlen(sb);
for(i=len-1,k=0;i>=0;k++,i--)
{
sum[k]=sum[k]-'0'+sb[i];
n=k;
while(sum[n]>'9')
{
sum[n+1]=sum[n+1]+(sum[n]-'0')/10;
sum[n]=(sum[n]-'0')%10+'0';
n++;
}
}
printf("Case %d:\n%s + %s = ",j,sa,sb);
j++;
for(i=1008;sum[i]=='0';i--);
for(;i>=0;i--)
printf("%c",sum[i]);
printf("\n");
if(t>0)
printf("\n");
}
return 0;
}
相似回答