C语言 长整数加减乘

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%d",&m);
if(m==1)write(c[1]);
read (L,dl);
}
}
i--;
if(str[i]>='0'&&str[i]<='9')
ListCreate_L(L,dl);
else {
printf("输入错误!,请重新输入\n");
read (L,dl);
}
return OK;
}
void Output(Status data){
printf(",",data);
managedata(a,b,data,temp);
if(!a&&!b&&!temp)return OK;
return 0;
}
if(a){data=a->data+temp;a=a->next;temp=0;managedata(a,b,data,temp);if(!a)return OK;return 0;}
}
}
Status read(DuLinkList &L,DuLinkList &dl){
i=0;
gets(str);
if(str[i]=='-')i++;
for(;str[i]!='\0';i++){
if(str[i]<'0'||str[i]>'9'){
printf("输入错误!,请重新输入\n");
if(a->data<0){
m=1;
break;
}
for(;b;b=b->next)
if(b->data<0){
m=1;
break;
}
}
if(m)
{
temp=1;
data=-10000+data;
}
}
else if(data>9999){
temp=1;
data=data%10000;
}
else if(data<-9999){
L=(DuLNode*)malloc(sizeof(DuLNode));
if(L==NULL)exit(-1);
r=L;q=L;
for(;;){
q->next=NULL;
q->prior=r;
r=q;
if(Input(q->data)){if(str[0]=='-')q->dຫໍສະໝຸດ Baiduta=-q->data;break;}
ListPrint_L(a[1]);
printf(" + ");
ListPrint_L(b[1]);
printf("=");
ListPrint_L(c[1]);
printf("\n");
for(j=0;j<80;j++)
printf("\3");
int m;
printf("是否保存结果到文件:\n\t\t1.是\t其他.否\n\n");
for(;a&&b;a=a->next,b=b->next){
if(!a->next&&!b->next){
if(a->data>0)
{
if(a->data < -b->data)
m=1;
}
else{
if(-a->data > b->data)
m=1;
}
}
}
if(!a||!b){
for(;a;a=a->next)
q=(DuLNode*)malloc(sizeof(DuLNode));
r->next=q;
if(!q)exit(OVERFLOW);
if(a)a=a->next;
}
L->prior=NULL;
dl=r;
}
void multiplyadd(DuLinkList a,DuLinkList b,DuLinkList &L,DuLinkList &dl){
int m=0;
if(data<0&&data>-9999){
for(;a&&b;a=a->next,b=b->next){
if(!a->next&&!b->next){
if(a->data>0)
{
if(a->data > -b->data)
m=1;
}
else{
if(-a->data < b->data)
}
if(!curPtr->prior){printf("0");}
curPtr=curPtr->prior;
}
while(curPtr){
Output(curPtr->data);
curPtr=curPtr->prior;
}
}
void main();
void write(DuLinkList L);
int temp=0;
L=(DuLNode*)malloc(sizeof(DuLNode));
if(L==NULL)exit(-1);
r=L;q=L;
for(;;){
q->next=NULL;
q->prior=r;
r=q;
if(multiplymanage(a,y,q->data,temp))break;
for(;symble[3];symble[3]=symble[3]->next){
symble[3]->data=symble[3]->data+symble[0]->data+temp;
temp=0;
symble[0]=symble[0]->next;
if(symble[3]->data>9999||symble[3]->data<-9999){
if(a)data=a->data*y+temp;
else{data=temp;return OK;}
temp=0;
if(data>9999){
temp=(int)data/10000;
data=data%10000;
}
else if(data<-9999){
temp=(int)data/10000;
for(int j=0;i>=0;--i,j++)
{
if(str[i]=='-'&&i==0)break;
if(j%4==0)data=str[i]-'0';
if(j%4==1)data+=10*(str[i]-'0');
if(j%4==2)data+=100*(str[i]-'0');
if(j%4==3){data+=1000*(str[i]-'0');--i;if(i==-1||str[i]=='-')return OK;return 0;}
m=1;
}
}
}
if(!a||!b){
for(;a;a=a->next)
if(a->data>0){
m=1;
break;
}
for(;b;b=b->next)
if(b->data>0){
m=1;
break;
}
}
if(m)
{
temp=-1;
data=10000+data;
}
}
else if(data>0&&data<=9999){
data=data%10000;
}
if(!a->next&&!temp)return OK;
return 0;
}
void multiply(DuLinkList a,int y,DuLinkList &L,DuLinkList &dl){
DuLNode *r,*q; //r指向尾结点,q指向新开辟结点
temp=-1;
data=data%10000;
}
}
Status add(DuLinkList &a,DuLinkList &b,Status &data,int &temp){
if(a&&b){
data=a->data+b->data+temp;
temp=0;
a=a->next;b=b->next;
//--链表定义--
typedef struct DuLNode{
Status data; //数据域
struct DuLNode *next,*prior; //指针域
}DuLNode,*DuLinkList;
int i;
char str[400];
Status turn(Status &data){
if(str[0]=='-')q->data=-q->data;
q=(DuLNode*)malloc(sizeof(DuLNode));
r->next=q;
if(!q)exit(OVERFLOW);
}
L->prior=NULL;
dl=r;
return OK;
}
void managedata(DuLinkList a,DuLinkList b,Status &data,int &temp){
q=(DuLNode*)malloc(sizeof(DuLNode));
r->next=q;
if(!q)exit(OVERFLOW);
}
L->prior=NULL;
dl=r;
return OK;
}
Status multiplymanage(DuLinkList a,int y,Status &data,int &temp){
长整数加减乘
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define NULL 0
typedef int Status;
}
void ListPrint_L(DuLinkList L){
DuLNode *curPtr;
if(!L)
{
printf("空表!");
return ;
}
curPtr=L;
while(curPtr){
if(curPtr->data!=0){
printf("%d",curPtr->data);
curPtr=curPtr->prior;break;
temp=(int)symble[3]->data/10000;
symble[3]->data=symble[3]->data%10000;
}
}
if(symble[0]){
dl->next=symble[0];symble[0]->prior=dl;
dl=symble[1];
}
if(symble[2])symble[2]=symble[2]->next;
void addmain(){
DuLinkList a[2],b[2],c[2];
printf("\t\t\t\t长整数加法\n\n");
printf("请输入被加数:\n");
read(a[0],a[1]);
printf("输入的被加数是:\n");
ListPrint_L(a[1]);
printf("\n");
printf("请输入加数:\n");
read(b[0],b[1]);
printf("输入的加数是:\n");
ListPrint_L(b[1]);
printf("\n计算结果是:");
printf("\n");
for(int j=0;j<80;j++)
printf("\3");
DuListCreate_L(a[0],b[0],c[0],c[1]);
if(i==0)return OK;
}
return OK;
}
Status Input(Status &data){
return turn(data);
}
Status ListCreate_L(DuLinkList &L,DuLinkList &dl){
DuLNode *r,*q; //r指向尾结点,q指向新开辟结点
DuLinkList symble[4];
int temp=0;
multiply(a,b->data,L,dl);
symble[2]=L->next;
if(b)b=b->next;
for(;b;b=b->next){
symble[3]=symble[2];
if(symble[3])
multiply(a,b->data,symble[0],symble[1]);
if(data<1000 && data>-1000)printf("\2");
if(data<100 && data>-100)printf("\2");
if(data<10 && data>-10)printf("\2");
if(data<0)
printf("%d",-data);
else
printf("%d",data);
if(b){data=b->data+temp;b=b->next;temp=0;managedata(a,b,data,temp);if(!b)return OK;return 0;}
data=temp;
return OK;
}
Status DuListCreate_L(DuLinkList a,DuLinkList b,DuLinkList &L,DuLinkList &dl){
DuLNode *r,*q;
int temp=0;//r指向尾结点,q指向新开辟结点
L=(DuLNode*)malloc(sizeof(DuLNode));
if(L==NULL)exit(-1);
r=L;q=L;
for(;;){
q->next=NULL;
q->prior=r;
r=q;
if(add(a,b,q->data,temp))break;
相关文档
最新文档