求两个任意长的整数加法

问题描述:设计一个程序实现两个任意长的整数的求和运算。
要求:
利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。
#include
#include
typedef struct Node{
int data;
struct Node *prior;
struct Node *next;
}LNode,*LinkList;
void InitLink(LinkList *L)
{
*L=(LinkList)malloc(sizeof(LNode));
(*L)->prior=*L;
(*L)->next=*L;
}
void Delete(LinkList L)
{
LinkList p=L->next;
LinkList temp;
while(p!=L)
{
temp=p;
p->next;
free(temp);
}
L->next=L;
L->prior=L;
}
void Append(LinkList L,int s)
{
LinkList p=L;
LinkList temp=(LinkList)malloc(sizeof(LNode));
temp->next=L;
temp->data=s;
temp->prior=L->prior;
L->prior->next=temp;
L->prior=temp;
}
void Output(LinkList L)
{
LinkList p=L->next;
if(p==L)
{
printf("0");
return;
}
if(L->data==-1)
printf("-");
printf("%d",p->data);
p=p->next;
while(p!=L)
{
printf(",%04d",p->data);
p=p->next;
}
}
void Output2(LinkList L)
{
LinkList p=L->prior;
if(p==L)
{
printf("0");
return;
}
if(L->data==-1)
printf("-");
printf("%d",p->data);
p=p->prior;
while(p!=L)
{
printf(",%04d",p->data);
p=p->prior;
}
}
void Sum_Linksum(LinkList A,LinkList B,LinkList C)
{
LinkList a=A->prior;
LinkList b=B->prior;
int sum;
int carry=0;
C->data=1;
if(A->data C->data=-1;
while(a!=A&&b!=B)
{
sum=a->data+b->data+carry;
carry=sum/10000;
Append(C,sum%10000);
a=a->prior;
b=b->prior;
}
while(a!=A)
{
sum=a->data+carry;
carry=sum/10000;
Append(C,sum%10000);
a=a->prior;
}
while(b!=B)
{
sum=b->data+carry;
carry=sum/10000;
Append(C,sum%10000);
b=b->prior;
}
if(carry)Append(C,carry);
}
void DelZero(LinkList L)
{
LinkList p=L;
LinkList q;
while(p->prior!=L)
{
if(p->prior->data!=0)
break;
else
{
q=p->prior;
p->prior=q->prior;
q->prior->next=p;
free(q);
}
}

}
void Sub_Linknum(LinkList A,LinkList B,LinkList C)
{
LinkList HA=A;
LinkList HB=B;
LinkList a=HA->prior;
LinkList b=HB->prior;
int sub;
int borrow=0;
int flag=0;
C->data=1;
while(a!=HA&&b!=HB)
{
if(a->datadata) flag=1;
if(a->data>b->data) flag=0;
a=a->prior;
b=b->prior;
}
if(b!=HB) flag=1;
if(a!=HA) flag=0;
if(flag==1)
{
HA=B;
HB=a;
C->data=-1;
}
a=HA->prior;
b=HB->prior;
while(b!=HB){
sub=a->data-borrow-b->data;
if(sub>=0)
borrow=0;
else
{
borrow=1;
sub+=10000;
}
Append(C,sub);
a=a->prior;
b=b->prior;
}
while(a!=HA){
sub=a->data-borrow;
if(sub>=0)
borrow=0;
else
{
borrow=1;
sub+=10000;
}
Append(C,sub);
a=a->prior;
}
DelZero(C);
}
int main()
{
freopen("in.txt",stdin);
freopen("out.txt",stdout);
int i,k;
int dex=0,flag=0;
char ch;
LinnkList num[3];
printf("\nplease input Number:\n");
for(i=0;i InitLink(&num[i]);
while(scanf("%d",&k)!=EOF)
{
if(flag==0)
{
if(k {
num[dex]->data=-1;
k*=-1;
}
else if(k>0)
num[dex]->data=1;
else
num[dex]->data=0;
flag=1;
}
ch=getchar();
Append(num[dex],k);
if(ch!=',')
{
if(dex==1)
{
if(num[0]->data==0&&num[1]->data==0)
break;
Output(num[0]);
printf("+");
Output(num[1]);
printf("=");
if(num[0]->data==num[1]->data)
Sum_Linknum(num[0],num[1],num[2]);
else if(num[0]->data>0)
Sub_Linknum(num[0],num[1],num[2]);
else
Sub_Linknum(num[0],num[1],num[2]);
Output(num[2]);
puts("");
for(i=0;i<3;i++)
Delete(num[i]);

}
flag=0;
dex=!dex;
}
}
system("pause");
return 0;
}
这个程序出现了什么问题,为什么编译不出来

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
设计一个程序实现两个任意长的整数求和运算
用线性表实现整数加法,属于一个整数运算的计算器
简单LinuxC程序关于任意长整数相加(字符串实现)
Linux环境下,C语言中整数类型最长的是long long类型,占8个字节,即使如此,其能表示的数仍是有限的。如果想要实现更大的整数相加或其他运算,就不能只用long long类型或者普通整型。我们可以使用字符串来表示整数,可以由我们规定位数,这样就可以实现更大的(某种意义上的任意长)整数相加减。在这里,我使用字符串实现的是两个任意长整数相加。由于是使用的字符串,需要考虑的情况很多。下面我罗列几个需要注意的点:1、输入的问题,2、是否是数字,3、对齐的问题,4、进位的问题。
利用双向循环链表实现任意长的整数进行加法运算
【问题描述】 设计一个实现任意长的整数进行加法运算的演示程序 。 【基本要求】 利用双向循环链表实现长整数的存储,每个结点含一个整形变量。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 【测试数据】 (1)0;0;应输出“0”。 (2)-2345,6789;-7654,3211;应输出“-1,0000,0000”。 (3)-9999,9999;1,0000,000
面试题12—相关题目(任意两个整数相加)
题目:定义一个实现任意两个整数的加法函数。 代码示例: #include using namespace std; char *BigNunAdd(char *str1, char *str2) { int len1 = strlen(str1); int len2 = strlen(str2); int len = len1 > len2?len1 : len2; char *res
C++面试题(实现任意长度的整型数相加)
        #include &amp;lt;iostream&amp;gt;using namespace std;//可以实现任意长度的两个数相加char *add(char *num1, char *num2);int main(){     char n2[] = &quot;995623548946456423&quot;;     char n1[] = &quot;9954896431548699&quot;;     char *p...
经典算法11:任意长度整数加法
#include #include #include #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 /*定义堆栈*/ typedef char ElemType; typedef struct{ ElemType *base; ElemType *top; int stacksize;
任意长的整数加法运算
 【问题描述】       设计一个实现任意长的整数进行加法运算的演示程序。 【基本要求】 系统以菜单提示方式工作; 基本功能包括大整数输入、加法运算、大整数输出; 利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是-(215-1)~(215-1); 输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号
编程实现任意长度的两个正整数相加 代码实现
char* addBigInt(char* num1,char* num2) { int c = 0;//进位,开始最低进位为0 int i = strlen(num1)-1; int j = strlen(num2)-1; int maxLength = strlen(num1) >= strlen(num2)?(strlen(num1)+1):(strlen(num2)+1);//得到
任意长度的整数加法C语言代码
实现一个任意长度的整数加法   #include "stdio.h" #include "math.h" #include #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 typedef char ElemType; typedef  struct {  ElemType *base;  ElemType *top;
任意长整数加法运算(C++)实验文档
                 任意长整数加法运算(C++) 一、【实验内容】【问题描述】      设计一个实现任意长的整数进行加法运算的演示程序【基本要求】:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(215 - 1)~(215 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。      【测试数据】:(1)0;0
剑指offer之面试题12 大数相加 实现任意两个整数的加法
剑指offer面试题12  打印从1到最大的n位10进制数 。陷阱在于  当输入的n很大时,不管用int 或 long long 都会溢出。这个代码 剑指offer源码上已经给出。于此相关的题目是  定义一个函数,实现任意两个整数的加法,因为没有限定两个数的大小范围,所以也要当做大数问题处理,既用字符串表示。 代码如下:void BigNumberPlus(char * number1,cha
任意两个数的加法 C#版
今天看剑指OFFER,看到一个相关题目,要求定义一个函数,在该函数中可以实现任意两个整数的加法。由于没有限定输入两个数的大小范围,所以必须当作大数来处理。之前做面试题17 ,要求从1打印到最大的N位数,其中有一种思路和这题有点类似,花了一个小时,才编写出来,在输入格式正确的情况下(只输入数字,两个数字之间用空格隔开),能通过自己的所有案例,贴上代码,纪念自己复习算法的最后这段时光。共190+行代码...
两个任意长度的长整数相乘(C语言、双向链表方法)
两个任意长度的长整数相乘, 输出结果
c语言任意长整数的加减法代码
c语言代码写的任意长整数加减法,虽然不是最优化的,但时间度杂度还行。
大整数加法减法 完整算法 写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)(
加减法 乘除法自己琢磨吧... 写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)写一个表写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)写一个表
长整数加减法运算 双向链表
长整数加减法运算 双向链表 数据结构 算法
c/c++整理--实现任意长度正整数相加
编程实现任意长度的两个正整数相加   c/c++中有int、float、double等数据类型,但是它们的长度是有限的,现在要求可以是任意长度的正整数相加,这里可以使用字符串来表示数字,结果也是用字符串表示。这里的难点主要就是做加法运算时要考虑进位。 #include #include #include #include char* addBigInt(char* num1, cha
定义一个函数,在该函数中可以实现任意两个整数的加法。java实现
这道题实际上是一道面试题的拓展,原题是要求打印1到最大的n位数。原题是这样描述的:输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1,2,3,4,5一直到最大的三位数999。拿到这道题之后,对于没有大数经验的面试者估计立马就想到了一种简单的解法。首先求出这个最大的n位数,然后来一个for循环从1开始逐个打印。假如这么想那就掉入面试官的陷阱中去了。实际上这道题远没有这么简单,必须
实现任意长的整数进行加法运算的演示程序
 -----------------------------------------------------------------------问题描述: 设计一个实现任意长的整数进行加法运算的演示程序.----------------------------------------------------------------------------------基本要求: 利用双向循环链表实现
长整数的加减法
第一次写这么长的作业,各种困难,啥也不会,最后总算写完了,虽然不完美也不简洁,但是还是想记录一下 带头结点的双向循环链表存储,4位十进制一组,逗号分隔,实现任意长整数的加法减法运算,头结点做符号位 #include #include typedef int Elem; typedef struct Node {     Elem Data;     Node *next;    
任意长的整数进行加法运算
利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1)~ (2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 这是我用java写的,使用了双向循环链表,编译环境是myeclipse 8.0,可以运行,有人机交互界面,其中包含源代码,rar文件,还有报告。希望大家多多批评,提出建议,互相学习。
VC++ 利用位运算实现两个整数的加法运算
利用位运算实现两个整数的加法运算
C语言 实现长整数的相加
/* * C语言 实现长整数的相加 * @author 李政 &amp;lt;1244109467@qq.com&amp;gt; */ #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt; #define MAXLEN 1000 void longadd(char* s1,char* s2 ,int* s3) { int arr1[MAXLEN...
数据结构实习1.4 双向循环链表实现长整数加减
清华大学 严蔚敏版 数据结构题集 实习 1.4 长整数四则运算 C编写, DEV_C++ 编译器下运行通过 PS: 只实现了带符号加减,以应付作业. 纯应付作业,无实用价值... 纯用来赚资源分 PS PS: 题目太无聊了, 大数哪里有用链表弄的... 还是循环的... 狂faint.. - -|||
《剑指offer》——任意两个整数相加(乘)
#include using namespace std; //正整数相加 char *plus(char *a,char *b) { int len_a = strlen(a); int len_b = strlen(b); int len_sum; if(len_a < len_b) len_sum = len_b; else
任意长的整数加法 课程设计
课程设计 任意长的整数加法 C++ 数据结构
石大远程在线考试——《数据结构课程设计》 建立通信网络设计报告
(课 程 设 计 报 告 - 最小通信网) 1.1 任意长的整数加减法运算 设计算法,实现一个任意长的整数进行加法、减法运算的演示程序。例如:1234,5123,4512,3451,2345与-1111,1111,1111,1111,1111的加法结果为:0123,4012,3401,2340,1234。基本要求如下: (1) 利用链表实现长整数的存储,每个节点含一个整型变量; (2) 整型变量的范围:-(2^15 -1)~(2^15 -1); (3) 输入与输出形式每四位一组,组间用逗号分隔开。如:1986,8213,1935,2736,3299; (4) 界面友好,每步给出适当的操作提示,并且系统具有一定的容错能力。 至少给出下面的测试数据: (1)0; 0 (2)-2345,6789; -7654,3211 (3)-9999,9999; 1,0000,0000,0000 (4)1,0001,0001; -1,0001,0001 (5)1,0001,0001; -1,0001,0000 (6)-9999,9999,9999; -9999,9999,9999 (7)1,0000,9999,9999; 1 1.2 建立通信网络 在n个城市建设通信网络,只需架设n-1条线路即可。设计算法,求出如果以最低的经济代价建设这个通信网络。要求如下: (1) 至少包含10个城市; (2) 城市数n由键盘录入; (3) 城市坐标由随机函数产生小于100的整数; (4) 输出生成树中各条边以及它们的权值;
用c语言编程完成两个1000位以内的正整数的加法运算
因为1000位以内的数字相加,所以无法直接定义变量求和,故采用字符串数组存储的方式,然后将字符数字转化成整型数字再按位相加,处理进位情况,如果两个数位数不一致,要单独处理。 #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; #include&lt;ct...
两个任意长度的长整数相乘(华为oj,C++)
#include #include typedef struct NODE { struct NODE * pUp; int shuzhi; struct NODE * pNext; }*pNode; int main(void) { char strMultiplierA[100] = "987654321987654321987654321"; char strMultipl
超长正整数相加/华为机试(C/C++)
题目描述 请设计一个算法完成两个超长正整数的加法。 接口说明  /*  请设计一个算法完成两个超长正整数的加法。  输入参数:  String addend:加数  String augend:被加数  返回值:加法结果  */  public String AddLongInteger(String addend, String augend)  {      /*在这里实现功能*/  ...
C++语言实现长整数相加减
C++语言实现长整数相加减
数据结构任意长整数加法源程序
任意长整数加法源程序,可运行。课程设计代码。
双向链表实现长整数运算
*问题描述:设计一个实现任意长的整数进行加法运算的演示程序。 *基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1)~ (2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。  *测试数据: (1)0;0;应输出“0”。 (2)-2345,6789;-7654,3211;应输出“-1,000
长整数相乘思路分析完整版
长整数相乘思路分析完整版        想要解决一件复杂的事情,一般思路都是先从简单的开始,比如工业革命,就是从自行车到汽车再到轮船、火车。由简单到复杂,又开始瞎扯了,小朋友看到后,再去看看真正的工业革命。1.不考虑进位的相乘,举例12*12    (1)首先将字符串倒序放入数组       列算式我们会发现,总是从个位开始乘以被乘数的个位到十位,因此,按照我们的计算习惯,就分别把12和12这两个...
实现进行加法运算
实现进行加法运算,输入的数字存到数组里面,然后进行加法运算
C++解决大整数加法
c++解决大整数加法问题描述:求两个不超过200为的非负整数的和输入数据:输入有两行,每行是一个不超过200位的非负整数,没有多于的前导0.输出要求:输出只一行,即相加后的结果。结果里不能有多于的前导0,即如果结果是342,那么就不能输出0342.输入样例:22222222222222222222222223333333333333333333333333输出样例:5555555555555555...
实现任意长度数相加的C++程序源码
由于普通的数据类型具有数据范围有限,计算机一次处理的数据长度也有限,因此需要一种算法实现超大数的计算。 此程序是将大数分段,一次处理,最后再将结果处理输出。 数据结构使用双向链表,其中有基本数据段和进位数据段。 整形数据与字符串的转换使用strstream
LongAdd 长整型加法
提供了长整型的加法运算,C++的代码能够计算长整形的加法
数据库实现任意长度长整数操作
数据库,课程,实现任意长度长整数操作,包括加法、乘法、简单输出
利用位运算实现两个整数的加法运算
运用位运算实现两数之和
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习java的两个 java 求班级平均分