栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

NC1 大数加法 牛客题霸

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NC1 大数加法 牛客题霸

关于高精度大数的计算,我之前写过一篇笔记(ACWING 大神的思想模板),可以参考一下高精度

class Solution {
public:
    
    string solve(string s, string t) {
        // write code here
        // 为了进位相加的方便 我们将这两个“数”倒着存储
        vector A, B;
        int lenS = s.size() - 1;
        int lenT = t.size() - 1;
        
//         123456
        
        // 将数字倒着存储
        for (int i = lenS; i >= 0; --i) A.push_back(s[i] - '0');
        for (int i = lenT; i >= 0; --i) B.push_back(t[i] - '0');
        
//         6 5 4 3 2 1
        
        vector C; // 最终的结果
        
        int tm = 0; // 初始化进位为0  t = t + Ai + Bi
        
        // 从最低位开始相加
        for (int i = 0; i < A.size() || i < B.size(); ++i) {
            
            // 若 A 还没有走完,就加上它
            if (i < A.size()) tm += A[i];
            
            // 同理
            if (i < B.size()) tm += B[i];
            
            // 把当前的 t 取模后的值插入c
            C.push_back(tm % 10);
            
            tm /= 10; //是否有进位,未下一轮准备
        }
//         若还有进位就为结果插入进位1
        if (tm) C.push_back(1); // C 也是低位在前 6 5 4 3 2 1.。。。
        
        int lenC = C.size();
        reverse(C.begin(), C.end());
        string str1;
        for (int i = 0; i < lenC; ++i) {
            str1.push_back(C[i] + '0');
        }
        return str1;
    }
};

值得说明一下,若是Python解决这个问题的话,直接用int()函数转换字符串在相加就可以了,不会越界的,因为对于Python来说它的int的范围跟所在机器的系统有关,理论上长度无限(只有内存跟得上),但是C++就不行;所以我们还是好好理解一下高精度算法吧!☺

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号