首页 > 其他分享 >[AcWing 791]高精度加法

[AcWing 791]高精度加法

时间:2022-11-13 22:13:24浏览次数:60  
标签:10 791 int vector 数组 加法 AcWing 进位 size

image


点击查看代码
#include <iostream>
#include <vector> //含有size方法
using namespace std;

//C = A+B
vector<int> add(vector<int> &A, vector<int> &B){
    vector<int> C;
    int t = 0; //t表示进位
    
    for(int i = 0; i < A.size() || i < B.size(); i++){
        if(i < A.size()) t += A[i]; //加上加数A上的某位
        if(i < B.size()) t += B[i]; //加上加数B上的某位
        //此时的t表示: 上次运算产生的进位 + A[i] + B[i]
        C.push_back(t % 10); //本次运算的结果 模10后 放入数组C中
        t /= 10; //表示本次运算产生的进位 比10大则t=1 比10小则t=0 (逢十进一)
    }
    
    if(t) C.push_back(1); //最高位产生进位时 结果C中新增一个最高位 为1
    
    return C;
}

int main(){
    string a, b; //使用字符串的形式输入
    cin >> a >> b; //a = "123456"
    
    vector<int> A, B; //将输入的字符串转化为数字存到数组中 先存放个位 最后存放最高位
    for(int i = a.size()-1; i >= 0; i--) A.push_back(a[i] - '0'); //A = [6, 5, 4, 3, 2, 1]
    for(int i = b.size()-1; i >= 0; i--) B.push_back(b[i] - '0');
    
    auto C = add(A, B);
    for(int i = C.size()-1; i >= 0; i--) printf("%d", C[i]); //先输出最高位 最后输出个位
    
    return 0;
}




/*
四种情况:
A+B 
两个大整数相加    
A和B的位数大概是10的6次方

A-B   
两个大整数相减   
A和B的位数大概是10的6次方

A*a   
 一个大整数乘上一个小整数    
A的位数 <= 10的6次方  
a的数值 <= 10的9次方

A/b
求商和余数是多少


两个问题:
一、
大整数的存储 ---> 用数组
每一位存到一个数组里面
存时 
数组下标0 存个位
数组下标1 存十位
数组下标2 存百位
........以此类推
低位存到数组中第一个位置
因为两个整数相加可能会进位
在数组末尾添加数字较容易

二、
运算  模拟人工加法的过程
     A3  A2   A1  A0
+        B2   B1  B0
--------------------------
     C3  C2   C1  C0
对于每一位:  Ai + Bi + t
t 表示上一位的进位: 
无进位时t=0 有进位时t=1

*/



  1. 用数组逐位存放整数
  2. 个位存放到数组中的第一个位置
  3. 最高位存放到数组中的最后一个位置
  4. 运算过程中,模10后放入结果数组,注意进位为1或0

标签:10,791,int,vector,数组,加法,AcWing,进位,size
From: https://www.cnblogs.com/starryWJ/p/16887134.html

相关文章

  • 791. 自定义字符串排序
    791.自定义字符串排序classSolution{int[]w=newint[30];publicStringcustomSortString(Stringorder,Strings){for(inti=0;i<26;i......
  • 791. 自定义字符串排序
    791.自定义字符串排序给定两个字符串order和s。order的所有单词都是唯一的,并且以前按照一些自定义的顺序排序。对s的字符进行置换,使其与排序的 order 相匹配......
  • 791. 自定义字符串排序 ----- 自定义sort、权值排序、计数排序
    给定两个字符串order和s。order的所有单词都是唯一的,并且以前按照一些自定义的顺序排序。对s的字符进行置换,使其与排序的 order 相匹配。更具体地说,如果在 or......
  • [AcWing 790]数的三次方根
    点击查看代码#include<iostream>usingnamespacestd;intmain(){doublex;cin>>x;doublel=-10000,r=10000;//保证结果在此区间内whi......
  • Acwing第 77 场周赛
    (简单)4716.进球-AcWing题库#include<iostream>#include<map>usingnamespacestd;map<string,int>mp;intmain(){intn;cin>>n;s......
  • 重温python基础:列表相加的方法(两个list [] 加法)
    哈喽兄弟么,今天咱们来复习一下列表相加的两个方法。利用操作符++操作符对象是lista=[1,2,3]b=[4,5,6]c=a+bprint(c)#c的结果:[1,2,3,4,5,6] ......
  • 2022-11-11 Acwing每日一题
    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我......
  • 2022-11-10 Acwing每日一题
    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我......
  • 大数加法
     import java.util.*;public class Solution {    /**     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可     *......
  • [AcWing 789]数的范围
    点击查看代码#include<iostream>usingnamespacestd;constintN=100010;intn,m;intq[N];intmain(){cin>>n>>m;for(inti=0;i<n;i......