永发信息网

C语言编一个程序完成64位数据(无符号)的加法,减法运算

答案:2  悬赏:10  手机版
解决时间 2021-02-12 13:38
C语言编一个程序完成64位数据(无符号)的加法,减法运算,不允许直接使用64位的数据类型,long是长度为32位的数据类型。溢出要考虑容错。
最佳答案
#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');
}

}

这个程序多长的数都可以
全部回答
同问。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
南通市港闸区城市建设和管理指挥部地址有知道
圣人千虑,必有一失,愚人千虑,必有一得告诉
一平面简谐波在弹性介质中传播,在介质元从最
古交有线电视机顶盒星期天缴费能交吗
益民洗衣店(广汇商厦B座东)地址在什么地方,
新时代文体批发部在哪里啊,我有事要去这个地
我就是想知道了在对方有病的情况下女方提出离
如图,已知△ABC和△ADE都是等边三角形,连接
尤喀克塔木村在什么地方啊,我要过去处理事情
顺风公寓(龙桥大道辅路)地址在哪,我要去那里
公司裁员赔偿问题?
谁知道 哈尔滨道外北三道街 那家清真店 做的
旭磊路桥公路工程有限公司在什么地方啊,我要
用7,6,2,6玩24点游戏用什么方法
广西金刚石矿床分布
推荐资讯
高速上低速行驶,开50迈罚款么
中旅茶楼地址有知道的么?有点事想过去
一品蛋糕旗舰店这个地址在什么地方,我要处理
下列属于常见的清算模式的有()。A.实时全额清
英雄联盟千珏Q是可以对一个敌人射出三支箭么
梦见有仙气的人把我抓起来了,她告诉我,我很
求薄暮冰轮,彩蛋游戏全和番外。似乎有两部!
招行申请一定要上门吗
什么是比磨削能。
虐杀原形为什么购买不到铁拳和鞭子?
求一个肉体契约书汉化补丁
说人都在演戏 演的好是君子成功人士啥的 不好
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?