c语言双长整形相加,超长整型数相加

已结贴√

问题点数:10 回复次数:4

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

超长整型数相加

#include

#include

#include

char a[102],b[102];

int pd(char e[],char f[],int m,int n,int p)

{

while(m<=p){

if(e[m]>f[n])

return 0;

else if(e[m]

return 1;

else{

m++;

n++;

pd(e,f,m,n,p);

}

}

return 1;

}

int main()

{

int len1,len2;

void zs(char a[],char b[],int len1,int len2);

void fs(char a[],char b[],int len1,int len2);

scanf("%s%s",a,b);

len1=strlen(a)-1;

len2=strlen(b)-1;

if(a[0]!='-'&&b[0]!='-')

zs(a,b,len1,len2);

else

fs(a,b,len1,len2);

return 0;

}

void zs(char a[],char b[],int len1,int len2)

{

char sum[102],c[102],d[102];

int i=0,count=0,m1,m2,h;

while(len1>=0||len2>=0){

if(len1<0)

c[i]='0';

else

c[i]=a[len1];

if(len2<0)

d[i]='0';

else

d[i]=b[len2];

m1=c[i]-'0';

m2=d[i]-'0';

h=m1+m2+count;

count=h/10;

sum[i]=h%10+'0';

len1--;

len2--;

i++;

}

if(h>=10)

printf("1");

for(i--;i>=0;i--)

printf("%c",sum[i]);

printf("\n");

}

void fs(char a[],char b[],int len1,int len2)

{

char c[102],d[102],sum[103],e[102],f[102];

int i=0,count=0,m1,m2,h,len3,len4,p,q,t=1,s,len5,len6;

if(a[0]=='-'&&b[0]=='-')

{

strcpy(e,a+1);

strcpy(f,b+1);

len5=len3=strlen(e)-1;

len6=len4=strlen(f)-1;

while(len3>=0||len4>=0){

if(len3<0)

c[i]='0';

else

c[i]=e[len3];

if(len4<0)

d[i]='0';

else

d[i]=f[len4];

m1=c[i]-'0';

m2=d[i]-'0';

h=m1+m2+count;

count=h/10;

sum[i]=h%10+'0';

len3--;

len4--;

i++;

}

if((len5==len6)&&(e[0]=='0')&&(f[0]=='0'));

else

printf("-");

if(h>=10)

printf("1");

for(i--;i>=0;i--)

printf("%c",sum[i]);

printf("\n");

}

/***************************************************/

else

{

if(a[0]=='-'&&b[0]!='-'){

strcpy(e,a+1);

p=len3=strlen(e)-1;

strcpy(f,b);

q=len4=len2;

s=pd(e,f,i,i,p);

while(len3>=0||len4>=0){

if(len3<0)

c[i]='0';

else

c[i]=e[len3];

if(len4<0)

d[i]='0';

else

d[i]=f[len4];

m1=c[i]-'0';

m2=d[i]-'0';

if(p==1&&q==1){

h=m1-m2;}

else if(len3==len4){

if(s==0){

if(m1-count

h=m1+10-m2-count;

count=1;}

else{

h=m1-m2-count;

count=0;}}

else{

if(m2-count

h=m2+10-m1-count;

count=1;}

else{

h=m2-m1-count;

count=0;}}

}

else{

if(len3>len4)

{

if(m1-count

h=m1+10-m2-count;

count=1;}

else{

h=m1-m2-count;

count=0;}

}

else

{

if(m2-count

h=m2+10-m1-count;

count=1;}

else{

h=m2-m1-count;

count=0;}

}

}

sum[i]=(int)fabs(h)+'0';

len3--;

len4--;

i++;

}

if(p==1&&q==1&&m2

printf("-");

else if(len3==len4){

if(s==0){

printf("-");}}

else{

if(len3>len4)

printf("-");}

for(i--;i>=0;i--)

{

while(t&&i)

{

if(sum[i]=='0')

i--;

else{

t=0;

}

}

while(t==0&&i>0||i==0)

{

printf("%c",sum[i]);

i--;

}}

printf("\n");

}

/*****************************************************/

if(b[0]=='-'&&a[0]!='-'){

strcpy(e,b+1);

strcpy(f,a);

p=len3=strlen(e)-1;

q=len4=len1;

s=pd(e,f,i,i,p);

while(len3>=0||len4>=0){

if(len3<0)

c[i]='0';

else

c[i]=e[len3];

if(len4<0)

d[i]='0';

else

d[i]=f[len4];

m1=c[i]-'0';

m2=d[i]-'0';

if(p==1&&q==1){

h=m1-m2;}

else if(len3==len4){

if(s==0){

if(m1-count

h=m1+10-m2-count;

count=1;}

else{

h=m1-m2-count;

count=0;}}

else{

if(m2-count

h=m2+10-m1-count;

count=1;}

else{

h=m2-m1-count;

count=0;}}

}

else{

if(len3>len4)

{

if(m1-count

h=m1+10-m2-count;

count=1;}

else{

h=m1-m2-count;

count=0;}

}

else

{

if(m2-count

h=m2+10-m1-count;

count=1;}

else{

h=m2-m1-count;

count=0;}

}

}

sum[i]=(int)fabs(h)+'0';

len3--;

len4--;

i++;

}

if(p==1&&q==1&&m2

printf("-");

else if(len3==len4){

if(s==0){

printf("-");}}

else{

if(len3>len4)

printf("-");}

for(i--;i>=0;i--){

while(t&&i)

{

if(sum[i]=='0')

i--;

else{

t=0;

}

}

while(t==0&&i>0||i==0)

{

printf("%c",sum[i]);

i--;

}}

printf("\n");

}

}

}题目,输入两个数a,b,输出a+b的值,(|a|,|b|<=10^100),这个代码太长,有个测试用例老超时,求解,谢谢了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值