资源简介
[ 问题描述 ]
设计程序实现两个任意长整数的求和运算。
[ 基本要求 ]
《数据结构》题集
利用双向循环链表实现长整数的存储, 每个结点含一个整型变量. 任何整型变量的范围是 -(215-1)~(215-1)。输入和输出形式: 按中国对于长整数的表示习惯, 每四位一组,组间用逗号隔开。
[ 测试数据 ]
(1) 0;0;应输出"0"。
(2) -2345,6789;-7654,3211; 应输出"-1,0000,0000"。
(3) -9999,9999; 1,0000,0000,0000; 应输出"9999,0000,0001"。
(4) 1,0001,0001; -1,0001,0001; 应输出"0"。
(5) 1,0001,0001; -1,0001,0000; 应输出"1"。
[ 实现提示 ]
(1) 每个结点可以存放的最大整数为 215-1 = 32767 才能保证两数相加不会溢出。但若这样存,即相当于按 32768 进制数存,在十进制数与 32768 进制数间的转换十分不方便,故可以在每个结点中仅存十进制数的 4 位,即不超过 9999的非负整数, 整个链表被视为万进制。
(2)可以利用头结点数据域的符号代表长整数的符号。 用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。
[ 选作内容 ]
修改上述程序,使它在整型量范围是-(2n-1)~(2n-1) 的计算机上都能有效地运行。其中 n 是由程序读入的参量。输入数据的分组方法可另行规定。
代码片段和文件信息
#include
#include
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int status;
typedef struct DuCirNode{
int data;
struct DuCirNode *prior;
struct DuCirNode *next;
int len;
}DuCirNode *DulinkList;
status createlink(DulinkList *L)
{
if(!(*L=(DulinkList)malloc(sizeof(DuCirNode)))) return OVERFLOW;
(*L)->next=*L;
(*L)->prior=*L;
(*L)->len=0;
return OK;
}
/*插入结点*/
status insertNode(DulinkList *L int data)
{
DulinkList p;
if(!(p = (DulinkList)malloc(sizeof(DuCirNode)))) return OVERFLOW; /*生成新结点*/
p->data=data;
p->next=(*L)->next;
(*L)->next->prior=p;
(*L)->next=p;
p->prior=*L;
(*L)->len++;
return OK;
}
/*deleteNode(*L);*/
status deleteFirst(DulinkList *L)
{
DulinkList p;
if((*L)->len==1)
return 0;
p=(*L)->next;
(*L)->next=p->next;;
free(p);
(*L)->len--;
return OK;
}
void DestroyList(DulinkList *L){
DulinkList *q;
while(L){
q=L;
L=(*L)->next;
free(q);
}
}
status input(DulinkList *L){
int i=0t=0k;
/*int len=0;*/
int j=0sum=0c=0;
char *sx;
s=(char *)malloc(100*sizeof(char ));
s[0]=‘0‘;
/*scanf(“%c“&x);*/
x=getchar();
while(x!=‘\n‘&&x!=‘ ‘){
if(x!=‘‘){
i++;
t=i-1;
}
if(i==1){
if(x>=‘0‘ && x<=‘9‘){
(*L)->data=1;
s[i]=x;
}
else if(x==‘-‘){
(*L)->data=-1;
s[t]=‘-‘;
}
else if(x==‘+‘){
(*L)->data=1;
s[t]=‘+‘;
}
/*else if(x==‘0‘){
insertNode(L0);
return OK;}*/
//else ;
}
else{
if(x>=‘0‘ && x<=‘9‘){
if(s[0]==‘0‘)
s[i]=x;
else
s[t]=x;
}
}
/* scanf(“%c“&x);*/
x=getchar();
}
/* getchar();*/
if(s[0]==‘0‘)
s[++i]=‘\0‘;
else
s[i]=‘\0‘;
/*s[++i]=‘\0‘;*/
for(i=strlen(s)-1;i>0;i--){
if(s[1]==‘0‘){
insertNode(L0);
return OK;
}
j=j%4;
c=s[i]-‘0‘;
for(k=0;k c*=10;
sum=sum+c;
j++;
if(j==4){
insertNode(Lsum);sum=0;
}
/* j++;*/
}
/*j--;*/
if(j<4 /*&& j>=0*/)insertNode(Lsum);
return OK;
}
status add(DulinkList L1 DulinkList L2 DulinkList *result)
{
DulinkList p1p2q1q2;
int resDatat*jinwei*jieweii=1;
jinwei=(int *)malloc(100*sizeof(int));
jiewei=(int *)malloc(100*sizeof(int));
p1=L1->prior;
p2=L2->prior
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-04-06 10:40 长整数运算\
目录 0 2019-03-31 00:10 长整数运算\bin\
目录 0 2019-03-31 10:55 长整数运算\bin\Debug\
文件 34844 2019-03-31 10:55 长整数运算\bin\Debug\长整数运算.exe
文件 9838 2019-03-31 10:55 长整数运算\main.c
目录 0 2019-03-31 00:10 长整数运算\obj\
目录 0 2019-03-31 10:55 长整数运算\obj\Debug\
文件 7817 2019-03-31 10:55 长整数运算\obj\Debug\main.o
文件 1134 2019-03-31 00:10 长整数运算\长整数运算.cbp
文件 145 2019-03-31 10:52 长整数运算\长整数运算.depend
文件 359 2019-04-06 10:40 长整数运算\长整数运算.layout
- 上一篇:arcgis10.5+汉化包安装包
- 下一篇:labview示波器上位机程序
评论
共有 条评论