求两个任意长的整数加法

问题描述:设计一个程序实现两个任意长的整数的求和运算。
要求:
利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如: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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
任意长的整数加法 课程设计
课程设计 任意长的整数加法 C++ 数据结构
任意长的整数加法运算
 【问题描述】       设计一个实现任意长的整数进行加法运算的演示程序。 【基本要求】 系统以菜单提示方式工作; 基本功能包括大整数输入、加法运算、大整数输出; 利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是-(215-1)~(215-1); 输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号
任意长的整数进行加法运算
利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1)~ (2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 这是我用java写的,使用了双向循环链表,编译环境是myeclipse 8.0,可以运行,有人机交互界面,其中包含源代码,rar文件,还有报告。希望大家多多批评,提出建议,互相学习。
任意位数整数加法
每行输入任意个整数,回车后输出这些整数之和。0表示程序结束 可以运行
求任意两个整数的最大公因数
按照欧几里得算法,编写程序,求用户从键盘输入的任意两个整数的最大公因数。 程序的运行结果如下所示: 输入:120 80输出:40分析:根据欧几里得算法gcd(a,b)=gcd(b,a%b)证明不妨假设 a&amp;gt;b则a=k*b+r①因为gcd是a、b的最大公约数,所以可以设a=gcd(a,b)*m②,b=gcd(a,b)*n③联立上面的三个式子得gcd(a,b)*m=k*gcd(a,b)*n+r,...
求任意两个整数之间所有整数的和
&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt; &lt;title&gt; 1 &lt;/title&gt; &lt;script type="text/javascript"&gt; ...
利用双向循环链表实现任意长的整数的加法运算的演示程序,谢谢
基本要求:rn 利用双向循环链表实现长整数的存储,每个结点含一个整形变量,任何整形变量的范围是-32767————32767,输入和输出形式按照中国传统的对长整数的表示方法,每4为一组,组间用逗号隔开rn 测试数据:rn (1) 0和0 应该输出0rn (2)-2345,6789和-76543211 应该输出-1,0000,0000rn (3)-9999,9999和1,0000,0000,0000 应该输出9999,0000,0001rn(4)1,0001,0001和-1,0001,0001 应该输出0rn 实现提示rn (1) 每个结点中可以存放的最大整数为32767,才能保重两数相加不会溢出,但是若这样存放,既相当于按32768进制数存放,在十进制数与32768进制数之间的转换十分不方便,故可以在每个结点中仅存十进制的4位,既不超过9999的非负整数,整个链表表示为万进制数rn (2) 可以利用头结点数据域的符号域代表长整数的符号,相加过程中不要破坏两个操作数链表,不能给长整数位数规定上限rnrn
利用双向循环链表实现任意长的整数进行加法运算
【问题描述】 设计一个实现任意长的整数进行加法运算的演示程序 。 【基本要求】 利用双向循环链表实现长整数的存储,每个结点含一个整形变量。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 【测试数据】 (1)0;0;应输出“0”。 (2)-2345,6789;-7654,3211;应输出“-1,0000,0000”。 (3)-9999,9999;1,0000,000
设计一个任意长的整数进行加法运算的演示程序
利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是-(2的十五次幂-1)--(2的十五次幂-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号搁开。
任意两个整数之间的和
输入两个整数,求这两个个整数之间的整数和
求两个任意大的整数的和怎么实现?
超过long型的数怎么办
剑指offer之面试题12 大数相加 实现任意两个整数的加法
剑指offer面试题12  打印从1到最大的n位10进制数 。陷阱在于  当输入的n很大时,不管用int 或 long long 都会溢出。这个代码 剑指offer源码上已经给出。于此相关的题目是  定义一个函数,实现任意两个整数的加法,因为没有限定两个数的大小范围,所以也要当做大数问题处理,既用字符串表示。 代码如下:void BigNumberPlus(char * number1,cha
剑指offer第二版-17_1任意两个整数的加法
/** * 定义一个函数,在该函数中可以实现任意两个整数的加法 * &amp;amp;amp;lt;p&amp;amp;amp;gt; * 对于这道题,由于没有限定输入的两个数的范围,所以要按照大数问题来进行处理 * 由于题目要求是要实现任意两个整数的加法,我们就要考虑如何实现大数的加法,此外,两个数字是任意的,所以要考虑负数 * 对于大数问题,常用的方法就是使用字符串来表示这个大数,我们可以首先将两个整数用字符串进行表示,然后分别将...
设计一个程序实现两个任意长的整数求和运算
用线性表实现整数加法,属于一个整数运算的计算器
求任意整数n的阶乘
主要思想: 初始值为1. 然后把1放入数组存着,(按位存,比如999,即f[0]=9, f[1]=9, f[2]=9) 然后数组的每一位都乘以2,(注意还有进位) 然后数组的每一位都乘以3,… 然后数组的每一位都乘以n.最后从后往前,输出每一位即是结果。注意,数组后面从非0开始计算。即最高位就是第一个非0位。#include <iostream> #include <string.h> #
求任意整数的阶乘
求任意整数的阶乘
求整数n的加法组合
输入整数 n ,从数列1,2,3.......n 中 随意取几个数,使其和等于 n ,要求将其中所有的可能组合列出来.编程求解
JSP+JavaBean实现任意两个整数和
【问题】设计 Web 程序,计算任意两个整数的和,并在网页上显示结果。要求在 JavaBean 中实现数据的求和功能。 【分析】需要两个页面 input.jsp 和 show.jsp ,以及Add.java 【实现】 (1)首先设计实现数据求和的 JavaBean 类 Add.java,其代码如下: package beans; public class Add { private ...
求将任意长字符串转换成整数的算法
如字符串a[]="ab",它的计算机代码为:"01100001 01100010"(结尾符不计)那么它代表的10进制整数为"24930",16进制为"0X6162"。rnrn现求算法,将任意长的字符串转换为10进制整数。(因为计算机字长的限制,可将这个整数存在一个字符数组中)rn请教了,谢谢。
整数加法
题目描述 请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error 输入描述: 输入为一行,包含两个字符串,字符串的长度在[1,100]。 输出描述: 输出为一行。合法情况输出相加结果,非法情况输出error 示例1 输入 123 123 abd 123 输出 246 Error
任意位数的两个16进制加法运算
前段时间因为项目需要,要求需要用到两个30位的16进制数运算相加,普通的类型装换会溢出,无法得出真正的结果,用ASP脚本写了算法,下班没事用Java写了这个可以进行任意位数的16进制加法运算,希望得到指正修改,下面是代码: package com.xhs.test; import java.util.Scanner; public class Test { &amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;am
求任意整数范围内的完全数
可运行程序,求任意正整数范围内的完全数并逐个显示出来
求任意整数的倒序---工具
#include<stdio.h> void main() { int m=0,n,s; scanf("%d",&n); s = n; while(s != 0) { r = s %10; //从低位到高位逐一分离 m = 10*m+r; //重新组合一整数 s = s/10; //求其商
用加法实现两个整数乘法操作
int get_multi_value(int a,int b) { int res = 0; if(a < b) { std::swap(a, b); } while(b) { if(b&0x1)res+=a; a<<=1; b>>=1; } return res; } int main() { cout<<get_multi_value(5, 6)<<end
利用位运算实现两个整数的加法运算
x^y:实现不进位的加法,那么我们接下来只要把进位后的数据加上就可以了x&y:这个操作即是找出相同位,因为只有当1&1=1,这种情况加法才会产生进位(x&y)<<1:x与y相加后产生进位,那么应该在该位前一位+1,即左移一位int Add(int x,int y) { if(0==y) { return x; } int sum=x^y; int carry
求任意两整数之和
只需在求两个整数之和里添加一个scanf输入函数。 #include&amp;lt;stdio.h&amp;gt; int main() { int a,b,sum; scanf(&quot;%d %d&quot;,&amp;amp;a,&amp;amp;b); sum=a+b; printf(&quot;sum=%d\n&quot;,sum); return 0; }  ...
位运算实现两个整数的加法运算
在程序员面试宝典中,看到了这个知识点,在这里记录一下实现代码。         #include using namespace std; int add(int a,int b) { if(b==0) return a; int sum,carry; sum=a^b; carry=(a&b)<<1; return add(sum,carry); }
LongAdd 长整型加法
提供了长整型的加法运算,C++的代码能够计算长整形的加法
ACM长数加法
前几天,在这个论坛上发的一个帖子,给我提的意见,可以说毫无用处。我听说,CSDN上高手不少,我也相信,比我强的人很多,可是他们太让我失望了,我今天在检查这个程序又发现一个问题,我才明白,回答我上个帖子的人根本就没认真看,我希望,各位高手,给我点帮助,谢谢了,小弟我真的需要你们的帮助。rnrnInputrnThe first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.rnrn rnrnOutputrnFor each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.rnrn rnrnSample Inputrn2rn1 2rn112233445566778899 998877665544332211rn rnrnSample OutputrnCase 1:rn1 + 2 = 3rnrnCase 2:rn112233445566778899 + 998877665544332211 = 1111111111111111110rn rnrn#includern#includern#includern#define LEN 1001rnmain()rnrn char arr1[LEN],arr2[LEN],arr3[LEN];rn int i,j,n,l,l1,l2,s;rn scanf("%d",&n);rn for(j=0;j
计算两个任意长的正整数相加
自己写的能够实现两个任意长的正整数相加的小程序。
最大公因数
基本要求: 从键盘输入两个整数,输出两个整数的最大公约数。用C或C++语言实现程序解决问题。          1.程序风格良好(使用自定义注释模板)          2.使用三种算法解决问题          3.提供友好的输入输出,并进行输入数据的正确性验证。 package test; import java.util.Scanner; public
求两个整数的最大公约数
题目:从键盘输入两个整数,输出两个整数的最大公约数。用C或C++语言实现程序解决问题。(三种方法解决)/*两数之和法*/ #include<stdio.h>void main() { void count(int,int); int a,b; printf("请输入要求最大公约数的两个整数:\n"); scanf("%d %d",&a,&b); if(a>b)
请用C++设计一个程序实现两个任意长的整数(包括正数和负数)、任意精度实数的算术运算。
长整数、高精度运算rn rn问题描述:rn设计一个程序实现两个任意长的整数(包括正数和负数)、任意精度实数的算术运算。rn rn要求:rn(1)用动态链表存贮数据,每结点含一个整型变量,表示若干位数。rn(2)整数输入和输出按中国对于长整数的习惯表示,每3位1组,组间用逗号隔开。rn(3)实现加、减运算。rn(4)程序运行界面清晰实用。rn rn选择:rn求两数之商、之积。rn
求两个的整数之和
设置3个变量,任意两个存放变量,第三个数存和。 #include&amp;lt;stdio.h&amp;gt; int main() { int a,b,sum; a=1; b=2; sum=a+b; printf(&quot;sum=%d\n&quot;,sum); return 0; }  
求两个整数的比例
给出两个值,求他们最接近的比例rn比如说 621 : 123 是 6:1rn10 跟 5 得到的结果应该是 2:1 rn怎么做
剑指offer——求两个整数和
题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 C++代码: class Solution { public: int Add(int num1, int num2) { int a = num1 ^ num2; int b = num1 &amp; num2; int c = b &lt;&lt;...
求两个整数的百分比
/** * 求两个整数的百分比 * @param numerator 分子 * @param denominator 分母 * @return String 百分比 */ public static String getPercent(int numerator,int denominator) { // 创建一个数值格式化对象 NumberFormat...
求两个整数之和
这个比较简单,先设置3个变量,x和y用来存放两个整数,sum用来存放两数之和,用赋值运算符“=”把相加的结果赋给sum 编写程序: #include                             //编译预处理指令 int main()                                          //定义主函数 { int x,y,sum;       
任意长整数加法课程设计
用C++实现,数据结构课程设计报告。比较完整。