问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用单链表实现任意两个长整数相加的程序最好带注释,谢了

发布网友 发布时间:2023-10-27 21:05

我来回答

1个回答

热心网友 时间:2023-11-18 22:40

#include<stdio.h>
#include<stdlib.h>
#define HUNTHOU 10000
typedef struct node{ int data;
struct node *next;
}NODE; /*定义链表结构*/

NODE *insert_after(NODE *u,int num); /*在u结点后插入一个新的NODE,其值为num*/
NODE *addint(NODE *p,NODE *q); /*完成加法操作返回指向*p+*q结果的指针*/
void printint(NODE *s);
NODE *inputint(void);

void main()
{
NODE *s1,*s2,*s;
printf("Enter S1= ");
s1=inputint(); /*输入被加数*/
printf("Enter S2= ");
s2=inputint(); /*输入加数*/
printf(" S1="); printint(s1); putchar('\n'); /*显示被加数*/
printf(" S2="); printint(s2); putchar('\n'); /*显示加数*/
s=addint(s1,s2); /*求和*/
printf("S1+S2="); printint(s); putchar('\n'); /*输出结果*/
}
NODE *insert_after(NODE *u,int num)
{
NODE *v;
v=(NODE *)malloc(sizeof(NODE)); /*申请一个NODE*/
v->data=num; /*赋值*/
u->next=v; /*在u结点后插入一个NODE*/
return v;
}
NODE *addint(NODE *p,NODE *q) /*完成加法操作返回指向*p+*q结果的指针*/
{
NODE *pp,*qq,*r,*s,*t;
int total,number,carry;
pp=p->next; qq=q->next;
s=(NODE *)malloc(sizeof(NODE)); /*建立存放和的链表表头*/
s->data=-1;
t=s; carry=0; /*carry:进位*/
while(pp->data!=-1&&qq->data!=-1) /*均不是表头*/
{
total=pp->data+qq->data+carry; /*对应位与前次的进位求和*/
number=total%HUNTHOU; /*求出存入链中部分的数值 */
carry=total/HUNTHOU; /*算出进位*/
t=insert_after(t,number); /*将部分和存入s向的链中*/
pp=pp->next; /*分别取后面的加数*/
qq=qq->next;
}
r=(pp->data!=-1)?pp:qq; /*取尚未自理完毕的链指针*/
while(r->data!=-1) /*处理加数中较大的数*/
{
total=r->data+carry; /*与进位相加*/
number=total%HUNTHOU; /*求出存入链中部分的数值*/
carry=total/HUNTHOU; /*算出进位*/
t=insert_after(t,number); /*将部分和存入s指向的链中*/
r=r->next; /*取后面的值*/
}
if(carry) t=insert_after(t,1); /*处理最后一次进位*/
t->next=s; /*完成和的链表*/
return s; /*返回指向和的结构指针*/
}
NODE *inputint(void) /*输入超长正整数*/
{
NODE *s,*ps,*qs;
struct number {int num;
struct number *np;
}*p,*q;
int i,k;
long sum;
char c;
p=NULL; /*指向输入的整数,链道为整数的最低的个位,链尾为整数的最高位*/
while((c=getchar())!='\n') /*输入整数,按字符接收数字*/
if(c>='0'&&c<='9') /*若为数字则存入*/
{
q=(struct number *)malloc(sizeof(struct number)); /*申请空间*/
q->num=c-'0'; /*存入一位整数*/
q->np=p; /*建立指针*/
p=q;
}
s=(NODE *)malloc(sizeof(NODE));
s->data=-1; /*建立表求超长正整数的链头*/
ps=s;
while(p!=NULL) /*将接收的临时数据链中的数据转换为所要求的标准形式*/
{
sum=0;i=0;k=1;
while(i<4&&p!=NULL) /*取出低四位*/
{
sum=sum+k*(p->num);
i++; p=p->np; k=k*10;
}
qs=(NODE *)malloc(sizeof(NODE)); /*申请空间*/
qs->data=sum; /*赋值,建立链表*/
ps->next=qs;
ps=qs;
}
ps->next=s;
return s;
}
void printint(NODE *s)
{
if(s->next->data!=-1) /*若不是表头,则输出*/
{
printint(s->next); /*递归输出*/
if(s->next->next->data==-1)
printf("%d",s->next->data);
else{
int i,k=HUNTHOU;
for(i=1;i<=4;i++,k/=10)
putchar('0'+s->next->data%(k)/(k/10));
}
}
}追问怎么想的

求编程:实现两个长整数相加:要求用链表(单链表或双向链表)实现两个任意...

先在函数Creat_List中用头插入法创建一个表示大数的链表 因为用头插入法方便大数相加 (例如:123 456 用头插入法插入的时候 遍历的序列为:3、2、1 也就是低位先遍历)然后在函数Add_Big_Num中用头插入法创建大数之和sum 具体代码如下:include&lt;stdio.h&gt; include&lt;stdlib.h&gt; typedef struct node ...

c语言编程:用单链表实现两个无限大的两个数的加法和乘法,并将两个数...

// 本程序主要由三个文件构成:// BigInteger.h 包涵了对节点的结构定义,以及类BigInteger的定义.// BigInteger.cpp 包涵了BigInteger类里面成员函数的具体内容.// main.cpp 主函数.../***///BigInteger.hstruct Node //定义了节点的结构{ char Num; Node *Prev,*Next;};class BigInteger ...

设计一个程序实现两个任意长的整数求和与差的运算

//mat97 //以下是双链表的节点结构,每个节点存储一个4位的数,比如1,0031,0056存入链表后就是1,31,56三个节,输出的时候再补0输出! typedef struct node{ int n; struct node *next; struct node *prev; } node; node *p; char num1[1024],num2[1024]; int conv(char *a) { int n=0,i; for...

设计一个程序实现两个任意长的整数求和与差的运算

include &lt;string.h&gt; //mat97 //以下是双链表的节点结构,每个节点存储一个4位的数,比如1,0031,0056存入链表后就是1,31,56三个节,输出的时候再补0输出!typedef struct node{ int n;struct node *next;struct node *prev;} node;node *p;char num1[1024],num2[1024];int conv(char *a...

高分求助!急!用链表或数组实现大整数的加减乘运算代码,包含负数运算...

void BigNumsAdd(char *numa,char *numb) //大整数的相加,其中两个参数分别为两个待输入的字符串 { int *Num1=NULL,*Num2=NULL,*answer=NULL;int weishu1,weishu2,wei;int i,s=0;if(numa[0]=='-' &amp;&amp; numb[0]!='-') //两个数一正一负的时候,改变符号后转跳到相减 { numa[...

单链表实现十进制大整数运算。

使用单链表实现不限大小的整数,每个结点存储一位数字。要求实现加、减运算,即能从键盘上输入两个大整数,比如:12345123451234512345和-11111111111111111111,则加的结果应为:01234012340123401234;减的结果应为:23456234562345623456。你的程序能运算并输出上述结果。要有注释哦 展开 ...

帮我找个c语言程序 300行左右的 要每行后面都有很全的注释,谢谢了

2011-03-02 求C语言小程序源代码,300行左右 32 2011-01-12 求c语言程序,500行左右,要有详细注释。 1 2013-05-01 linux下c语言程序 至少300行,有注释,主题不限 2013-08-10 求一个300行左右的简单的c语言程序 1 2007-12-29 求30行以上简单的C语言程序,要每行都有注释,明天用 2 2014-11-14...

用线性表设计一个100位以内的长整数加减运算的程序 求程序

程序如下:include&lt;iostream&gt; include&lt;iomanip&gt; using namespace std;class very_big_number { public:int section_of_number;very_big_number(int number)//每9位为1段 { section_of_number = number;} int *p_section_list = new int[section_of_number];void input(){ cout &lt;&lt; "输入数字,...

用Java编写 任意长的整数加法

private int len2;public void setAdd1() throws IOException { int i=0;String sLine1;System.out.print("请输入第一个长整数: ");//输入第一个长整数 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));sLine1=in.readLine();for(;i&lt;sLine1.length();i++)add1...

用C语言编程:使用单链表实现不限大小的十进制整数,并实现加、减运算

程序我就不写了,给楼主一个建议:将整数的各位反序存入链表。如123,存为3-&gt;2-&gt;1。这样在加减时方便模拟手工列式加减操作。

实现两个大整数相加 单链表难以实现的排序 如何实现单链表的就地逆置 对单链表实现就地逆置的算法 c语言单链表的实现 单链表实现 单链表的排序 java单链表实现 分数与整数相加怎么算
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
介绍几部恐怖片,是欧美的僵尸那种的,最好人类有(好枪)去对抗的_百度知 ... 求推荐几部欧美丧尸片,剧情一定要好,要吓人。例如僵尸世界大战... 结婚讲究门当户对什么意思 读书|《简•爱》:婚姻中的门当户对,是爱情基础上的人格平等 关于婚姻应该门当户对的文学作品 拿到美国临时绿卡一共有几种途径?除了结婚还有什么途径吗? 申请美国临时绿卡要申请多长时间才能拿到 vivox21格式化怎么用 vivo手机怎么格式化(vivo手机怎么格式化恢复到最初) 请问什么是“羹”啊? 哪个女作家散文写得好?不要写爱情的。3 用双向链表做程序:任意长的整数加法 水泥胶砂抗压强度试件龄期为()。 农行存单忘记密码怎么办? 已已婚女人怀孕了,孩子可以上户口吗 请问肇庆学院和湛江师范哪间学校比较好啊?? 白敬亭为什么不谈恋爱 我有一台电平板电脑现在家用路由器用着,请问能插上手机卡做手机... 台电科技g173g四核怎么安手机卡 视频 适合台电平板电脑的内存卡3 台电g18。怎样插电话卡?是小卡还是大卡。 男人喜欢网恋的原因是什么?18 小米4麦克风怎么设置14 停电后来电,变压器刚开始送电正常,过一段时间缺相是什么情况? 清朝十四阿哥胤祯.和四阿哥胤禛.怎么名字都一样的1 农村的夏天经常停电,是哪些原因引起的?1 急!!湛江师范学院,肇庆学院,嘉应学院三所学校,哪所学校的师范专业最好... 给别人用了以后,然后就冻结了,会出现什么情况?1 冻结了,有人给发消息会收到提示吗?是什么样的提示了18 你好,我想问如果我的一个朋友的冻结了他又不知道的情况下...1 你觉得中国当代散文写得好的作家是是谁?155 哪一位女作家的爱情散文写得好,是属于现代人的。例如简贞类的。2 一个手机号怎么申请第二个? 农历1971年腊月23晚8时出生属相是猪还是鼠,即72年的春节未过。 玩个狼人杀还爆粗口,是啥心态2 狼人杀结束后,你学会的是骂人还是做人 学生自杀现象是否说明大学生心理素质差?谈谈你的建议。 贵阳龙阁惠文化传播有限公司怎么样? 北京坐地铁5号线去坐运通128路在哪站下 深圳易通天下投资股份有限公司怎么样? 我现在用的一个 我想在安装一个 号 请问怎样下载安装13 我想下载一个码,怎么下载?47 东营青岛路和燕山路交叉口有闯红灯拍照吗1 交通银行信用卡好还是白卡好 怎么把微信好友转移到另一个? 我想知道有一个图片看看是不是情头6 有谁能知道切尔诺贝利事件?11 有一部猫和狗成天打架的动画片。很久很老的。有谁知道叫什么名字吗... 详细介绍一下切尔诺贝利发生事故的过程7 想问一下美团外卖骑手的电动车都是自己自备的吗17