java实现超长正整数的加法_【C/C++】超长正整数的加法

本文介绍了一种使用C语言实现超长正整数加法的方法,包括输入两个超长整数,逐位相加并考虑进位,最后输出结果。通过示例代码展示具体实现过程。
摘要由CSDN通过智能技术生成

这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)

【问题描述】

编写程序实现两个超长正整数(每个最长80位数字)的加法运算。

【输入形式】

从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。

第一行是超长正整数A;

第二行是超长正整数B;

【输出形式】

输出只有一行,是两个长整数的运算结果,从高到低依次输出各位数字。各位数字紧密输出。

算法提示:

1.用字符串输入两个超长整数,分别存放在两个字符串中,每一位对应一个字符串中的字符。

2.以较短的超长整数为基准,从低位到高位,对应位转换成数字后相加,再加上前一位相加的进位,得到的和模上10再转换为字符即为当前位,得到的和整除10即为当前位的进位。将计算得到的每一位保存到结果字符数组。

3.将较长字符串的剩余位加上最后一个进位移到结构数组后面。

4.将结果数组反序输出(去掉高位多余的0)。

【输入样例】

134098703578230056

234098

【输出样例】

134098703578464154

【样例说明】

进行两个正整数加法运算,134098703578230056 + 234098 = 134098703578464154。

【评分标准】

完全正确得20分,每个测试点4分,提交程序文件名为add.c。

【代码】

//大数加法 2018/12/3/11:44

//写的一堆垃圾。。。以后再改

#include

#include

int main()

{

char a[81]={};

char b[81]={};

scanf("%s",a);

getchar();

scanf("%s",b);

getchar();

int j;

for(j=0;j<81;j++)

{

if(a[j]!='0')

{

break;

}

}

int k;

for(k=0;k<81;k++)

{

if(b[k]!='0')

{

break;

}

}

char c[81];

char d[81];

int i;

for(i=0;i<81;i++)

{

c[i]='0';

d[i]='0';

}

for(i=0;i

{

c[i]=a[strlen(a)-1-i];

}

for(i=0;i

{

d[i]=b[strlen(b)-1-i];

}

int final[81]={0};

for(i=0;i<81;i++)

{

if((int)c[i]+(int)d[i]+final[i]-96<10)

{

final[i]+=(int)c[i]+(int)d[i]-96;

}

else

{

final[i]+=(int)c[i]+(int)d[i]-58-48;

final[i+1]=1;

}

}

int save;

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

{

if(final[i] >0&&final[i]<10 )

{

save=i;

break;

}

}

int m;

if(strlen(a)-j>strlen(b)-k)

{

m=strlen(a)-j;

}

else

{

m=strlen(b)-k;

}

if(final[m]!=0)m+=1;

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

{

printf("%d",final[i]);

}

return 0;

}

PS:由于当时刚学C语言,很多代码显得很稚嫩...需要的人见谅...

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值