119.超长正整数的加法
#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.超长正整数的加法相关推荐
- 两个超长正整数的加法c语言,二个超长正整数的相加
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 看看这个,定义数组的长度为251,可以实现最长250位的两个整数相加. #include #include main() {int i; char str ...
- c语言两种加法,两个超长正整数的加法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int an=-1,bn=-1,max,flag=0; char a[50]={'0'},b[50]={'0 ...
- c语言超长整数加法计算,两个超长正整数的加法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int an=-1,bn=-1,max,flag=0; char a[50]={'0'},b[50]={'0 ...
- 超长正整数加法 c语言,两个超长正整数的加法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int an=-1,bn=-1,max,flag=0; char a[50]={'0'},b[50]={'0 ...
- 超长整数加法c语言,两个超长正整数的加法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int an=-1,bn=-1,max,flag=0; char a[50]={'0'},b[50]={'0 ...
- 程序设计大作业---超长正整数的减法
[问题描述] 编写程序实现两个超长正整数(每个最长80位数字)的减法运算. [输入形式] 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083). 1. 第一行是超长正整数A: 2. 第二行 ...
- C语言—超长正整数的乘法实现简洁版
今天给大家带来一道题目: 使用数组完成两个超长(位数长度小于 100)正整数的乘法. 从键盘输入两个正整数,输出乘法计算的结果. 题目看起来字很少,可这逻辑过程却不少. 我们知道,不管是 int 还是 ...
- java编程两个超长正整数相减_【每日编程237期】数字分类
1012 数字分类 每日编程中遇到任何疑问.意见.建议请公众号留言或直接撩Q474356284(备注每日编程) 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 ...
- C语言实现长整数连加,二个超长正整数的相加
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 看看这个,定义数组的长度为251,可以实现最长250位的两个整数相加. #include #include main() {int i; char str ...
最新文章
- c语言combine函数,combine
- Mysql当前的根密码核查_在MySQL数据库中复位根用户的密码的方法
- Python3 Scrapy爬取猫眼TOP100代码示例
- Xilinx zynq-7000 SOC 设计导论
- 华为重磅反击,鸿蒙来了!
- Map value类型不同的写法
- Java StringBuilder getChars()方法与示例
- python path模块_python pathlib模块详解
- Linux/Ubuntu 单机配置Hbase
- kloxo 中php如何设置,Kloxo使用教程(5):〖网站设置〗——在Kloxo中设置伪静态...
- 基于深度学习(端到端)的OCR文字识别
- UTF8下的中文截取
- Html 5 Input type=range 滑动条
- 数据结构(C语言版 第2版严蔚敏版)完整课后习题答案汇总
- 嵌入式robocode实训-任务三
- 远程控制计算机危险,小心远方的黑手 解析远程控制带来的危险 (2)
- Java为什么要序列化
- Codeforces1457 C. Bouncing Ball(思维+dp)
- Zedboard(一)开发环境Vivado
- 用CSS画一只哆啦A梦
热门文章
- 维纳—辛钦(Winner-Khitchine)定理的证明
- 推荐几个Mac插件帮你提升工作效率
- 第三十九章、PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片
- java 百度地图demo,百度地图api demo 根据地址查询 经纬度
- 美格信-骨传导单体振子测试
- 中国移动5G消息开发者社区第二期文旅主题沙龙顺利举行!
- [南京大学]-[软件分析]课程学习笔记(一)-introduction
- 蓝桥杯打卡(220118)
- 本单据或后续单据已经生成了凭证,不能修改/删除!
- 拓嘉启远:怎样才能避免拼多多网店被限制