原题链接:川哥的吩咐
解题思路:由于是大数,所以只能用字符串保存输入的内容,然后逆序,然后再相加,再考虑进位。本题中用字符数组a,b保存输入的两个数,逆序后相加保存到整型数组c中,最后考虑进位情况。
注意事项:注意最后一次是否有进位。
参考代码:
#include <stdio.h>
#include <string.h>
#define N 1002
void reverse(char *s) //逆序函数
{
int len,i,j;
char t;
len=strlen(s);
for(i=0,j=len-1;i<j;i++,j--)
{
t=s[i]; s[i]=s[j]; s[j]=t;
}
}
int main()
{
char a[N]={0},b[N]={0};
int c[N]={0};
int n,i,lena,lenb,lenc,jinwei;
while(scanf("%s%s",a,b)!=EOF)
{
lena=strlen(a); //求长度
lenb=strlen(b);
reverse(a); //逆序a
reverse(b); //逆序b
n=lena<lenb?lena:lenb;
for(i=0;i<n;i++) //相加前面部分
c[i]=(a[i]-'0') +(b[i]-'0');
if(lena<lenb)
for(i=lena;i<lenb;i++) //复制后面一段
c[i]=b[i]-'0';
else
for(i=lenb;i<lena;i++) //复制后面一段
c[i]=a[i]-'0';
lenc=lena>lenb?lena:lenb;
jinwei=0;
for(i=0;i<lenc;i++) //考虑进位情况
{
c[i]+=jinwei;
jinwei=c[i]/10;
c[i]=c[i]%10;
}
if(jinwei==1) //最后一位是否有进位
{
lenc++;
c[i]=1;
}
for(i=lenc-1;i>=0;i--) //输出全部
printf("%d",c[i]);
printf("\n");
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复