IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 高精度加减乘除 -> 正文阅读

[C++知识库]C++ 高精度加减乘除

目录

高精度加法

高精度减法

高精度乘法

高精度除法

高精度加法:

1,把数当做字符串处理

2, 大于10进位

3,反转一下可能更好处理

#include <iostream>
#include <string>
#include <algorithm>
const int N = 1e6;
int v[N];
int a[N];
int b[N];
using namespace std;
int main()
{
    string A, B;
    cin >> A >> B;
    reverse(A.begin(),A.end());
    reverse(B.begin(),B.end());
    string C;
    int i,kk,k;
    for (kk=0 ; kk<A.size(); kk++ )
        a[kk]+=(int)(A[kk]-'0');
    for (k=0 ; k<B.size(); k++ )
        b[k]+=(int)(B[k]-'0');
    for(i;i<kk||i<k;i++)
    {
        v[i]+=(a[i]+b[i]);
        if(v[i]>=10)
        {
            v[i]-=10;
            v[i+1]++;
        }
    }
    int flag=0;
    for(i=kk+k+1;i>=0;i--)
    {
        if(v[i])
            flag++;
        if(flag)
        C+=('0'+v[i]);
    }
    if(flag==0)
        C+=('0');
    for(int i=0;i<C.size();i++)
        cout<<C[i];
    return 0;
}

高精度减法

1,让大数减去小数

2,使用vector

3,压位

#include<bits/stdc++.h>
using namespace std;
vector<int> res,x,y;
bool vector_swap(vector<int> x,vector<int> y)
{
    if(x.size()>y.size())return true;
    if(x.size()<y.size())return false;
    for(int i=0;i<x.size();i++)
    {
    if(x[i]>y[i])return true;
    if(x[i]<y[i])return false;
}
    return true;
}
vector<int> minuse(vector<int> x,vector<int> y)
{
    int t=0;
    reverse(x.begin(),x.end());
    reverse(y.begin(),y.end());
    for(int j=0;j<x.size();j++)
    {
    int s=0;
    if(j<y.size())s-=y[j];
    s+=(x[j]+t);
    if(s>=0)res.push_back(s),t=0;
    else res.push_back(s+10),t=-1;
    }
    int i=res.size()-1;
    while(i>0&&res[i]==0)i--,res.pop_back();
    return res;
}
int main()
{
    string a,b;
    cin>>a>>b;
    for(int i=0;i<a.size();i++)x.push_back(a[i]-'0');
    for(int i=0;i<b.size();i++)y.push_back(b[i]-'0');
    if(vector_swap(x,y)==false)swap(x,y),cout<<'-';
    minuse(x,y);
    for(int i=res.size()-1;i>=0;i--)
    cout<<res[i];
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
vector<int> res,x,y;
int cheak(string A,string B)
{
    if(A.size()>B.size())
    return 0;
    if(A.size()==B.size())
    return B>A;
    return 1;
}
vector<int> minuse(vector<int> x,vector<int> y)
{
    int t=0;
    reverse(x.begin(),x.end());
    reverse(y.begin(),y.end());
    for(int j=0;j<x.size();j++)
    {
    int s=0;
    if(j<y.size())s-=y[j];
    s+=(x[j]+t);
    if(s>=0)res.push_back(s),t=0;
    else res.push_back(s+10),t=-1;
    }
    int i=res.size()-1;
    while(i>0&&res[i]==0)i--,res.pop_back();
    return res;
}
int main()
{
    string a,b;
    cin>>a>>b;
    for(int i=0;i<a.size();i++)x.push_back(a[i]-'0');
    for(int i=0;i<b.size();i++)y.push_back(b[i]-'0');
    while(a.size()&&a[0]=='0')
    {
    a.erase(0,1);
    }
    cin>>b;
    while(b.size()&&b[0]=='0')
    {
    b.erase(0,1);
    }
    if(cheak(a,b))
    {
    cout<<'-';
    minuse(y,x);
    }
    else
    minuse(x,y);
    for(int i=res.size()-1;i>=0;i--)
    cout<<res[i];
    return 0;
}
#include <iostream>
#include <vector>

using namespace std;

bool cmp(vector<int> &A, vector<int> &B)
{
    if (A.size() != B.size()) return A.size() > B.size();

    for (int i = A.size() - 1; i >= 0; i -- )
        if (A[i] != B[i])
            return A[i] > B[i];

    return true;
}

vector<int> sub(vector<int> &A, vector<int> &B)
{
    vector<int> C;
    for (int i = 0, t = 0; i < A.size(); i ++ )
    {
        t = A[i] - t;
        if (i < B.size()) t -= B[i];
        C.push_back((t + 10) % 10);
        if (t < 0) t = 1;
        else t = 0;
    }

    while (C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}

int main()
{
    string a, b;
    vector<int> A, B;
    cin >> a >> b;
    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;

    if (cmp(A, B)) C = sub(A, B);
    else C = sub(B, A), cout << '-';

    for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];
    cout << endl;

    return 0;
}

作者:yxc
链接:https://www.acwing.com/activity/content/code/content/39793/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

高精度乘法

for (int i = 0; i < A.size(); i ++ )
        for (int j = 0; j < B.size(); j ++ )
            C[i + j] += A[i] * B[j];
//乘法
for (int i = 0, t = 0; i < C.size(); i ++ )
    {
        t += C[i];
        C[i] = t % 10;
        t /= 10;
    }
//处理

高精度减法

for(int i = A.size() - 1; i >= 0; i --)
    {
        r = r * 10 + A[i];
        C.push_back(r / b);
        r %= b;
    }
    reverse(C.begin(), C.end());
//大数除小数
//从前往后

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:40:43  更:2021-09-10 10:41:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:11:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码