原题链接:蓝桥杯基础练习VIP-高精度加法
解题思路:
通过题目描述我们可以知道,用普通的加法是解决不了的,即使采用double也是不可取的。这题是属于高精度加法,高精度常用的算法有加法、减法、乘法、除法。
例如,有两个字符串,str1="123456789",str2="123456",用整型数组num1字符串str1的数字,用num2存储读字符串str2。如下所示。

然后将数组num2的元素加到数组num1,如下图所示。

遍历数组num1,如果num1中的某个元素num[i]大于10,就进入如下操作,num[i]减10,num[i+1]加1。

最后反向输出数组num1即可。
参考代码:
#include <iostream>
#include <string>
#include <cstring>
#define maxn 105
typedef unsigned long ul;
using namespace std;
int num1[maxn],num2[maxn];
ul add(string str1,string str2){
ul size1 = str1.size(),size2 = str2.size();
for(ul i = 1; i <= size1; i ++){
num1[i] = str1[size1 - i] - 48;
}
for(ul i = 1; i <= size2; i ++){
num2[i] = str2[size2 - i] - 48;
}
for(int i = 1; i <= size1; i ++){
num1[i] += num2[i];
}
for(int i = 1; i <= size1; i ++){
if(num1[i] >= 10){
num1[i+1] += 1;
num1[i] -= 10;
}
}
if(num1[size1+1] > 0){
size1 ++ ;
}
return size1;
}
int main(){
string str1,str2;
cin >> str1;
cin >> str2;
ul len;
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
if(str1.size() >= str2.size()){
len = add(str1,str2);
}else{
len = add(str2,str1);
}
for(int i = 1; i <= len; i ++){
cout << num1[len - i + 1];
}
cout << endl;
}0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复