火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

高精度算法

作者: 作者的头像   huolong , 时间:2025-11-30 14:49:04 , 所有人可见, 阅读  24

#include<bits/stdc++.h>
using namespace std;

vector<int> a , b ;

vector<int> add(const vector<int> &a, const vector<int> &b)
{
    //默认是a长 b短
    if(b.size() > a.size()) return add(b,a) ;
    int t = 0;
    vector<int> c ;
    for(int i=0; i<a.size() || t; i++){
        if(i<a.size()) t += a[i];
        if(i<b.size()) t += b[i];
        c.emplace_back(t%10);
        t /= 10;
    } 

    reverse(c.begin() , c.end() ) ;
    return c;
}


vector<int> jian(const vector<int> &a, const vector<int> &b) 
{
    vector<int> c ;
    int t = 0;//借位 
    for(int i=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; 
    }

    //去除前导0
    while(c.back() == 0 && c.size() > 1) c.pop_back() ; 

    reverse(c.begin(), c.end() ) ;
    return c ;

}

//字符串比较 
bool cmp(string s1, string s2){

    if(s1.size()!= s2.size()){
        for(int i=0; i<max(s1.size() , s2.size()); i++){
            if(s2[i] != s1[i]) return s1[i] < s2[i];
        }
    }else{
        return s1 < s2 ; 
    }

}


vector<int> mul(const vector<int> &a, int b)
{
    vector<int> c;
    int t = 0;
    for(int i=0; i<a.size() || t; i++){
        if(i < a.size()) t += b * a[i];
        c.push_back(t % 10);
        t/=10;
    }

    while(c.back() == 0 && c.size() > 1) c.pop_back() ; 

    reverse(c.begin(), c.end() ) ;
    return c ;



} 


int main(){
    // "987"
    // "43"
    string s1;
    string s2;
    int b;
    cin >> s1 >> b;

    for(auto i :s1) a.emplace_back(i-'0');reverse(a.begin(), a.end());
    //for(auto i :s2) b.emplace_back(i-'0');reverse(b.begin(), b.end());
    //高精度加法 
    //vector<int> c = add(a,b);
    //高精度减法 
//  vector<int> c;
//  if(cmp(s1,s2)) {
//      cout << '-';
//      c = jian(b,a);
//  }else{
//      c = jian(a,b);
//  }

    //高精度乘以低精度 string s1; int b;
    vector<int> c = mul(a, b); 
    for(auto i : c) {
        cout << i  ;
    }



    return 0;
}

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码