解题思路:
        通过题目描述我们可以知道,用普通的加法是解决不了的,即使采用double也是不可取的。这题是属于高精度加法,高精度常用的算法有加法、减法、乘法、除法。

        例如,有两个字符串,str1="123456789",str2="123456",用整型数组num1字符串str1的数字,用num2存储读字符串str2。如下所示。

pic2.png

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

pic1.png

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

pic3.png

    最后反向输出数组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;

}


点赞(2)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

早起床 2年前 回复TA
这个处理长度大小和进位的方法太秀了,