美文网首页
大数加法

大数加法

作者: HeoLis | 来源:发表于2019-03-20 09:32 被阅读0次
#include<bits/stdc++.h>
using namespace std;

string add(string a, string b){
    a = a.substr(a.find_first_not_of('0'));
    b = b.substr(b.find_first_not_of('0'));
    long long lenA = a.length();
    long long lenB = b.length();
    long long len = max(lenA, lenB) + 10;
    
    // 翻转,便于从低位逐步求和
    reverse(a.begin(), a.end()) ;
    reverse(b.begin(), b.end());
    
    // 初始化答案为len长,全部为字符0
    string ans(len, '0') ;
    
    // 把a拷贝到ans中
    for(int i = 0; i < a.length(); i++)
        ans[i] = a[i] ;
    
    // tmp 是上一位相加后的进位
    int tmp = 0;
    for(int i = 0; i < len; i ++) {
        if(i < b.length())
            tmp += (ans[i] - '0') + (b[i] - '0');
        else
            tmp += (ans[i] - '0');
        ans[i] = tmp % 10 + '0';
        tmp /= 10; // 留给计算下一位用 (这里利用了强制类型转换) 
    }
    reverse(ans.begin(), ans.end());
    return ans.substr(ans.find_first_not_of('0'));
}

int main(){
    string a = "9999999999";
    string b = "1111111111";
    cout << add(a, b) << endl;
    
    
    return 0;
}

相关文章

  • 机试常用算法和题型-大数专题

    大数专题 字符加减关系,实现任意长度整数相加 大数加法,进阶转换版 大数浮点数加法 大数运算之阶乘

  • 大数加法

  • 大数加法

  • 大数加法

  • 无符号大数相加(C语言实现)

    请用自己熟悉的语言,实现无符号大数加法操作。a. 完成两个大数的加法 A + B = C,并正确处理进位情况;b....

  • 大数乘法与加法

    1、大数乘法 (1)转换并反转,字符串转换为数字并将字序反转; (2)自动移位,逐位相乘,添加最后的进位; (3)...

  • 大数加法【Java实现】

    Java大数加法运算 将两个加法的相应位从高位到低位依次压入栈stackA和stackB中,结果栈stackSum...

  • 大数乘法

    其实大数乘法就是在考虑大数加法的进位的同时,考虑字符串num1和字符串num2相乘时,每一位所在的位置,以及加法运...

  • 2019.4.18

    上午的数学活动一千以内不进位的加法,我写题的时候小朋友很开心,能算这么大数字的加法了,感觉自己好厉害。计算过程...

  • 06-21:todo

    0、最长连续子序列 最长递增子序列: 核心思路:保持递增,代码如下: 1、二叉树路径和 2、大数加法/大数乘法 3...

网友评论

      本文标题:大数加法

      本文链接:https://www.haomeiwen.com/subject/sivamqtx.html