C语言编一个程序完成64位数据(无符号)的加法,减法运算
答案:2 悬赏:10 手机版
解决时间 2021-02-12 13:38
- 提问者网友:王者佥
- 2021-02-12 01:26
C语言编一个程序完成64位数据(无符号)的加法,减法运算,不允许直接使用64位的数据类型,long是长度为32位的数据类型。溢出要考虑容错。
最佳答案
- 五星知识达人网友:动情书生
- 2021-02-12 02:16
#include
#include
#define len sizeof(struct Long)
struct Long
{
int data;
struct Long *next;
};
struct Long *insert(struct Long *u,int m)
{
struct Long *v;
v=(struct Long *)malloc(len);
v->data=m;
u->next=v;
return(v);
}
struct Long *input()
{
struct Long *s,*ps,*qs;
struct num
{
int num;
struct num *np;
}*p,*q;
int i,j,k;
long sum;
char c;
p=NULL;
while((c=getchar())!='\n')
if(c>='0'&&c<='9')
{
q=(struct num *)malloc(sizeof(struct num));
q->num=c-'0';
q->np=p;
p=q;
}
s=(struct Long *)malloc(len);
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=(struct Long *)malloc(len);
qs->data=sum;
ps->next=qs;
ps=qs;
}
ps->next=s;
return(s);
}
struct Long *add(struct Long *p,struct Long*q)
{
struct Long *pp,*qq,*r,*s,*t;
int total,num,carry;
pp=p->next;
qq=q->next;
s=(struct Long *)malloc(len);
s->data=-1;
t=s;
carry=0;
while(pp->data!=-1&&qq->data!=-1)
{
total=pp->data+qq->data+carry;
num=total%10000;
carry=total/10000;
t=insert(t,num);
pp=pp->next;
qq=qq->next;
}
r=(pp->data!=-1)? pp:qq;
while(r->data!=-1)
{
total=r->data+carry;
num=total%10000;
carry=total/10000;
t=insert(t,num);
r=r->next;
}
if(carry)
t=insert(t,1);
t->next=s;
return(s);
}
struct Long *print(struct Long *s)
{
int i;
int k=10000;
if(s->next->data!=-1)
{
print(s->next);
if(s->next->next->data==-1)
printf("%d",s->next->data);
else
{
for(i=1;i<=4;i++,k/=10)
putchar('0'+s->next->data%(k)/(k/10));
}
}
}
main()
{
int k;
for(k=0;k<80;k++)
printf("*");
printf(" \t\t\t\tSCUT电信一班\n");
for(k=0;k<80;k++)
printf("*");
printf(" \t\t\t长整数计算器\n");
for(k=0;k<80;k++)
printf("*");
struct Long *s1,*s2,*s;
for(;;)
{
printf("\n输入第一个相加的数:\n");
s1=input();
printf("输入第二个相加的数:\n");
s2=input();
s=add(s1,s2);
printf("相加的结果是:\n");
print(s);
putchar('\n');
}
}
这个程序多长的数都可以
#include
#define len sizeof(struct Long)
struct Long
{
int data;
struct Long *next;
};
struct Long *insert(struct Long *u,int m)
{
struct Long *v;
v=(struct Long *)malloc(len);
v->data=m;
u->next=v;
return(v);
}
struct Long *input()
{
struct Long *s,*ps,*qs;
struct num
{
int num;
struct num *np;
}*p,*q;
int i,j,k;
long sum;
char c;
p=NULL;
while((c=getchar())!='\n')
if(c>='0'&&c<='9')
{
q=(struct num *)malloc(sizeof(struct num));
q->num=c-'0';
q->np=p;
p=q;
}
s=(struct Long *)malloc(len);
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=(struct Long *)malloc(len);
qs->data=sum;
ps->next=qs;
ps=qs;
}
ps->next=s;
return(s);
}
struct Long *add(struct Long *p,struct Long*q)
{
struct Long *pp,*qq,*r,*s,*t;
int total,num,carry;
pp=p->next;
qq=q->next;
s=(struct Long *)malloc(len);
s->data=-1;
t=s;
carry=0;
while(pp->data!=-1&&qq->data!=-1)
{
total=pp->data+qq->data+carry;
num=total%10000;
carry=total/10000;
t=insert(t,num);
pp=pp->next;
qq=qq->next;
}
r=(pp->data!=-1)? pp:qq;
while(r->data!=-1)
{
total=r->data+carry;
num=total%10000;
carry=total/10000;
t=insert(t,num);
r=r->next;
}
if(carry)
t=insert(t,1);
t->next=s;
return(s);
}
struct Long *print(struct Long *s)
{
int i;
int k=10000;
if(s->next->data!=-1)
{
print(s->next);
if(s->next->next->data==-1)
printf("%d",s->next->data);
else
{
for(i=1;i<=4;i++,k/=10)
putchar('0'+s->next->data%(k)/(k/10));
}
}
}
main()
{
int k;
for(k=0;k<80;k++)
printf("*");
printf(" \t\t\t\tSCUT电信一班\n");
for(k=0;k<80;k++)
printf("*");
printf(" \t\t\t长整数计算器\n");
for(k=0;k<80;k++)
printf("*");
struct Long *s1,*s2,*s;
for(;;)
{
printf("\n输入第一个相加的数:\n");
s1=input();
printf("输入第二个相加的数:\n");
s2=input();
s=add(s1,s2);
printf("相加的结果是:\n");
print(s);
putchar('\n');
}
}
这个程序多长的数都可以
全部回答
- 1楼网友:青尢
- 2021-02-12 03:18
同问。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯