原题链接:川哥的吩咐
解题思路:由于是大数,所以只能用字符串保存输入的内容,然后逆序,然后再相加,再考虑进位。本题中用字符数组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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复