#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;NODE *inputint(), *addint(), *insert_after();clrscr();puts("*********************************************************");puts("*              This program is to calculate             *");puts("*       the addition of king sized positive integer.    *");puts("*********************************************************");printf(" >> Input S1= ");s1=inputint();            /*输入被加数*/printf(" >> Input S2= ");s2=inputint();            /*输入加数*/printf(" >> The addition result is as follows.\n\n");printf("    S1= "); printint(s1); putchar('\n');     /*显示被加数*/printf("    S2= "); printint(s2); putchar('\n');     /*显示加数*/s=addint(s1,s2);                                 /*求和*/printf(" S1+S2="); printint(s); putchar('\n');    /*输出结果*/printf("\n\n Press any key to quit...");getch();
}
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,j,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));}}
}

119.超长正整数的加法相关推荐

  1. 两个超长正整数的加法c语言,二个超长正整数的相加

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 看看这个,定义数组的长度为251,可以实现最长250位的两个整数相加. #include #include main() {int i; char str ...

  2. c语言两种加法,两个超长正整数的加法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int an=-1,bn=-1,max,flag=0; char a[50]={'0'},b[50]={'0 ...

  3. c语言超长整数加法计算,两个超长正整数的加法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int an=-1,bn=-1,max,flag=0; char a[50]={'0'},b[50]={'0 ...

  4. 超长正整数加法 c语言,两个超长正整数的加法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int an=-1,bn=-1,max,flag=0; char a[50]={'0'},b[50]={'0 ...

  5. 超长整数加法c语言,两个超长正整数的加法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int an=-1,bn=-1,max,flag=0; char a[50]={'0'},b[50]={'0 ...

  6. 程序设计大作业---超长正整数的减法

    [问题描述] 编写程序实现两个超长正整数(每个最长80位数字)的减法运算. [输入形式] 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083). 1. 第一行是超长正整数A: 2. 第二行 ...

  7. C语言—超长正整数的乘法实现简洁版

    今天给大家带来一道题目: 使用数组完成两个超长(位数长度小于 100)正整数的乘法. 从键盘输入两个正整数,输出乘法计算的结果. 题目看起来字很少,可这逻辑过程却不少. 我们知道,不管是 int 还是 ...

  8. java编程两个超长正整数相减_【每日编程237期】数字分类

    1012 数字分类 每日编程中遇到任何疑问.意见.建议请公众号留言或直接撩Q474356284(备注每日编程) 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 ...

  9. C语言实现长整数连加,二个超长正整数的相加

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 看看这个,定义数组的长度为251,可以实现最长250位的两个整数相加. #include #include main() {int i; char str ...

最新文章

  1. c语言combine函数,combine
  2. Mysql当前的根密码核查_在MySQL数据库中复位根用户的密码的方法
  3. Python3 Scrapy爬取猫眼TOP100代码示例
  4. Xilinx zynq-7000 SOC 设计导论
  5. 华为重磅反击,鸿蒙来了!
  6. Map value类型不同的写法
  7. Java StringBuilder getChars()方法与示例
  8. python path模块_python pathlib模块详解
  9. Linux/Ubuntu 单机配置Hbase
  10. kloxo 中php如何设置,Kloxo使用教程(5):〖网站设置〗——在Kloxo中设置伪静态...
  11. 基于深度学习(端到端)的OCR文字识别
  12. UTF8下的中文截取
  13. Html 5 Input type=range 滑动条
  14. 数据结构(C语言版 第2版严蔚敏版)完整课后习题答案汇总
  15. 嵌入式robocode实训-任务三
  16. 远程控制计算机危险,小心远方的黑手 解析远程控制带来的危险 (2)
  17. Java为什么要序列化
  18. Codeforces1457 C. Bouncing Ball(思维+dp)
  19. Zedboard(一)开发环境Vivado
  20. 用CSS画一只哆啦A梦

热门文章

  1. 维纳—辛钦(Winner-Khitchine)定理的证明
  2. 推荐几个Mac插件帮你提升工作效率
  3. 第三十九章、PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片
  4. java 百度地图demo,百度地图api demo 根据地址查询 经纬度
  5. 美格信-骨传导单体振子测试
  6. 中国移动5G消息开发者社区第二期文旅主题沙龙顺利举行!
  7. [南京大学]-[软件分析]课程学习笔记(一)-introduction
  8. 蓝桥杯打卡(220118)
  9. 本单据或后续单据已经生成了凭证,不能修改/删除!
  10. 拓嘉启远:怎样才能避免拼多多网店被限制