解题思路:因为任何整形包括long long都不可能存储超过1000位的数字,所以,我们只能用字符数组一个数字一个数字的存储。
相加过程参考以前小学老师讲的,1,先从右到左对齐,2,从右到左,个位,十位。。。。等等的顺序相加,满10进1!2,因为我们的数字都是字符存储,所以相加的时候要减48化成数值,eg ‘0’-48==0;
注意事项:多组测试!!!
参考代码:(复制粘贴到编译器上,查看更方便!!)
#include<stdio.h>
#include<string.h>
#define N 1005
int main()
{
char a[N],b[N],c[N];
int len,len1,len2,cha;
int i,k;
while(scanf("%s %s",a,b)!=EOF)
{
len1=strlen(a);
len2=strlen(b);
len=len1>=len2?len1:len2;
for(i=0;i<len;i++)
c[i]='0';
k=0;
if(len1<len)
{
cha=len-len1;
for(i=len-1;i>=0;i--)
{
if(i<cha)
a[i]='0';
else
a[i]=a[i-cha];
}
}
else if(len2<len)
{
cha=len-len2;
for(i=len-1;i>=0;i--)
{
if(i<cha)
b[i]='0';
else
b[i]=b[i-cha];
}
}
for(i=len-1;i>=0;i--)
{
c[i]=(c[i]-48)+(a[i]-48)+(b[i]-48)+48;
if(i!=0&&(c[i]-48)>=10)
{
c[i]=(c[i]-48)-10+48;
c[i-1]++;
}
if(i==0&&(c[i]-48)>=10)
{
k=1;
c[i]=(c[i]-48)-10+48;
}
}
if(k==1)
printf("1");
for(i=0;i<len;i++)
{
printf("%c",c[i]);
}
printf("\n");
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复