| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 583 人关注过本帖
标题:[求助]关于超长数的加法问题
只看楼主 加入收藏
jmy2446267
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2007-4-14
收藏
 问题点数:0 回复次数:3 
[求助]关于超长数的加法问题

#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 
2007-04-17 17:14
liel
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2007-1-16
收藏
得分:0 
目的是什么 啊?超长数是什么啊?

2007-04-17 19:22
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
大数加法.
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;
}

倚天照海花无数,流水高山心自知。
2007-04-17 21:50
jmy2446267
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2007-4-14
收藏
得分:0 
哦,原来是用数组存储的啊,不错不错,不过对于几千位甚至几万位的如何用数组啊?

仗剑天下,快意恩仇!
2007-04-18 16:20
快速回复:[求助]关于超长数的加法问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035900 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved