高精度加法

 这个题目的解法就是它的名字:高精度加法;

算法思想:高精度加法的思想就是个模拟人脑加法的一个过程,我们对两个数字进行加法时先是对最低位进行相加,如果相加大于十那么就保留个位然后再向后面进一位以此类推直到加到最高位为止。

实现方法:当我们对两个大整数相加时,我们可以用字符串来读入两个大整数的值再将读入的值传到两个数组中去,然后创建一个变量t用来储存数组对应元素相加的值,同时对t进行%10的操作获取t的个位,然后再对t进行/10的操作来获取是否进位。

注意:在用数组读入两个大整数的值的时候,整数的各个位数应该应该从小到大一次读入。意思是说整数的个位应该放在数组的第一位,十位放在数组的第二位以此类推。例如:整数时12345,那么读入数组时应该是{5,4,3,2,1}。因为在两个整数进行相加时可能会发生进位从而得数要增加一位,如果说数组第一位就存入整数的最大位数的话那么进位时则需要将数组的每一个数都往后移一位,所以要将最大位数放在最后,那么进位的时候只需往数组后面加一个位置就行。

代码实现:

#include<iostream>

#include<string>

#include<vector>

#define int long long

using namespace std;

const int N=1e6 +10;

vector<int> add(vector<int>&A,vector<int>&B)//创建加法函数
{
    vector<int>c;//创建答案数组
    int t=0;//储存各个位数之和
    for(int i=0;i<A.size()||i<B.size();i++)//只要A或B位数不为0就进行循环
    {
        if(i<A.size()) t+=A[i];
        if(i<B.size()) t+=B[i];
        c.push_back(t%10);//将t的个位存入答案数组
        t/=10;//储存进位
    }
    if(t)c.push_back(1);//如果最后位数相加有进位那么就在最后位上加1;
    return c;
}
signed main()
{
    string a,b;
    vector<int> A,B;

    cin>>a>>b;//读入两个大整数1234 4567

    for(int i=A.size()-1;i>0;i--)A.push_back(a[i]-'0');//将大整数反序输入数组当中  4321
    for(int i=B.size()-1;i>0;i--)B.push_back(a[i]-'0');//  7654

    auto c=add(A,B);//调用加法函数

    for(int i=c.size()-1;i>=0;i--) printf("%d",c[i]);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值