高精度加法,模拟大数的加法运算
模拟 运算 加法 高精度 大数
2023-06-13 09:13:09 时间
在处理特别大的数相加特别大的数的时候,long long不能直接通过加法算出结果的时候,可以通过高精度算法处理这些数的相加具体·思路如下;
首先 1 . 这些数存到数组的时候该如何排列,是个位放在第一位还是最后一位放到第一位,由于数的相加的候常常出现进位,常在最后一位加上一个数,而加上数的话往往在数组最后一位加上数比较方便,所以我们把第个位放在数组第一位
2.其次在调用模拟大数相加的函数中,我们该如何处理同一位上数相加出现的进位呢,我们可以设置一个 t 存储数组上某位相加最后吧 t%10 ,就可以得到想要的数,同时在 t / 10 如果 t 会的得到 1 或者 0.
3.最后如果 t 不等于 0 的话,得到的数最后一位还得加上1
代码如下·(摘自acwing的y总思路)
#include <bits/stdc++.h>
using namespace std;
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++)
{
if(i < A.size()) t += A[i];
if(i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
if(t) C.push_back(1);
return C;
}
int main()
{
string a,b;
vector<int> A,B;
cin >> a >> b; //a = "123456"
for(int i = a.size() - 1;i >= 0; i--) A.push_back(a[i] - '0');
for(int i = b.size() - 1;i >= 0;i--) B.push_back(b[i] - '0');
vector <int> C= add(A,B);
for(int i = C.size() - 1;i >= 0;i --) printf("%d",C[i]);
}
相关文章
- HHHOJ 2022.05.29「NOIP模拟赛 贰」
- Power BI模拟FIFA世界杯球员数据卡片图-兼谈任意卡片图的制作
- 使用 Html、CSS 和 Javascript 的简单模拟时钟
- DynaForm安装教程 DynaForm5.9.4下载 板料成形数值模拟的专用软件
- 模拟仿真Tecplot下载安装教程Tecplot模拟仿真下载2019下载安装包
- Python使用map,reduce高阶函数模拟实现Spark的reduceByKey算子功能详解编程语言
- js中模拟栈详解编程语言
- 官方中文版《微软飞行模拟》定了!DX12也会有
- 模拟MSSQL 协议:实现专家级数据库安全(模拟mssql协议)
- 模拟Redis在UT测试中的应用(ut测试模拟redis)
- c#模拟jsescape方法的简单实例
- C#模拟Http与Https请求框架类实例