当前位置: 代码迷 >> C语言 >> [求助]关于超长数的加法问题
  详细解决方案

[求助]关于超长数的加法问题

热度:431   发布时间:2007-04-17 17:14:26.0
[求助]关于超长数的加法问题

#include <stdio.h>
#include <conio.h>
#define N 10000
typedef struct node
{
int n;
struct node *next;
}r,*pr;

pr inputint()
{
pr p,q=NULL,q1=(pr)malloc(sizeof(r)),p1=q1,p2=q1;
int i,j,s;char c;
while((c=getchar())!='\n')
{
p=(pr)malloc(sizeof(r));
p->n=c-'0';
p->next=q;
q=p;
}
while(p)
{
i=0,j=1,s=0;
while(i<4&&p)
{
s+=j*p->n;
i++;
j*=10;
p=p->next;
}
q1->n=s;
p2=q1;
q1->next=(pr)malloc(sizeof(r));
q1=q1->next;
}
p2->next=NULL,free(q1);
return p1;
}

void insert(pr p,int n)
{
p->next=(pr)malloc(sizeof(r));
p=p->next;
p->n=n;
}


pr plus(pr p1,pr p2)
{
int s;pr p=(pr)malloc(sizeof(r)),q,m=p,pp1=p1,pp2=p2;
int i=0;p->n=-1;
while(pp1&&pp2)
{
s=(pp1->n+pp2->n+i)%N;
i=(pp1->n+pp2->n+i)/N;
insert(p,s);pp1=pp1->next,pp2=pp2->next;
}
q=pp1?pp1:pp2;
while(q)
{
s=(q->n+i)%N;i=(q->n+i)/N;
insert(p,s);
q=q->next;
}
if(i)insert(p,1);
p->next=NULL;
return m->next;
}


void printint(pr p)
{
pr q,s=NULL,pp=p;
while(pp)
{
q=(pr)malloc(sizeof(r));
q->n=pp->n;
q->next=s;
s=q;
pp=pp->next;
}

while(s)
{
printf("%d",s->n);
s=s->next;
}
}

void main()
{
pr p1,p2,s;clrscr();
printf("please input the number1:");
p1=inputint();
printf("please input the number2:");
p2=inputint();
printf("the result is follows:");
s=plus(p1,p2);
printint(s);
getch();
}

大家帮忙找找问题吧,相信会有所收获的。

[此贴子已经被作者于2007-4-17 17:16:22编辑过]

搜索更多相关的解决方案: 加法  next  node  int  include  

----------------解决方案--------------------------------------------------------
目的是什么 啊?超长数是什么啊?
----------------解决方案--------------------------------------------------------
大数加法.
void Add_Big_Number(Int_str &a,Int_str &b)
{
int i=0,temp;
int t=0;//进位
while(i<a.len&&i<b.len)
{
temp=a.data[i]+b.data[i];
a.data[i]=(temp+t)%10;
t=(temp+t)/10;
i++;
}
while(i<a.len)
{
temp=a.data[i]+t;
a.data[i]=temp%10;
t=temp/10;
i++;
}
a.len=i;
while(i<b.len)
{
temp=b.data[i]+t;
a.data[i]=temp%10;
t=temp/10;
i++;
}
a.len=i;
}
----------------解决方案--------------------------------------------------------
哦,原来是用数组存储的啊,不错不错,不过对于几千位甚至几万位的如何用数组啊?
----------------解决方案--------------------------------------------------------
  相关解决方案