解题思路:
一、基本思路: 1、字符串读入 2、字符串转数组 3、竖式加法 4、消前导0 5、倒序输出
1、字符串读入:因为题目要求计算的数字已经远远超过了long long的范围,所以需要使用一个字符串来存储数字进行输入
2、字符串转数组:
例如一个数字:1238
x[0]='1' - '0' -->转换成数组 a[4]=1 可以推出--> x[i]='1' --> a[4-i]=1 //其中4为x的长度
x[1]='2' - '0' -->转换成数组 a[3]=2 x[i]='2' --> a[4-i]=2
x[2]='3' - '0' -->转换成数组 a[2]=3 x[i]='3' --> a[4-i]=3
x[3]='8' - '0' -->转换成数组 a[1]=8 //从个位开始 x[i]='8' --> a[4-i]=8
3、竖式加法:
例如:
1 2 3 8 设: a[1]=8 , b[1]=5
+ 4 6 5 推出公式——> 则 c[1]+=a[1]+b[1]=13 //小细节,这里要c[i]+=
———————— c[2]=c[1]/10; 进位
1 7 0 3 c[1]=c[1]%10; 进位后剩下的
4、消前导0:
要使得 两数的最高位都不是0
如果两个数字都是八位数的话会得到一个九位数,把长度加一即可
5、倒序输出:
以上的结果:
c[1]=3 c[2]=0 c[3]=7 c[4]=1
倒序输出即可得到答案
参考代码:
#include using namespace std; string x,y; //定义两个字符串 int a[100000],b[100000],c[100000],alen,blen,clen; int main() { cin >> x >> y; //字符串读入 alen=x.length(); //测量字符串x的长度 blen=y.length(); //测量字符串y的长度 for(int i=0 ; i<alen ; i++) { a[alen-i]=x[i]-'0'; //字符串转数组 } for(int i=0 ; i<blen ; i++) { b[blen-i]=y[i]-'0'; //字符串转数组 } clen=max(alen,blen); //取最大值 for(int i=1 ; i 0) //如果两个位数相同的相加要进一位 { clen++; //长度+1 } for(int i=clen ; i>=1 ; i--) //倒序输出 { cout << c[i]; } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复