高精度乘法(简单小白版)

简介: 高精度乘法(简单小白版)

高精度乘法

麻烦的模拟题,核心在于大数乘小数中(A*b),将大数A中的每一位与小数b相乘,用进位p表示所需进位,然后逐一更新大数A中的每一位



值得注意的是,大数A需要倒序存储,因为当需要进位的时候,一直向上填数组位置即可;若不倒序存储,进位时就会在a[-1]位置进位,这样会造成段错误  

#include<iostream>
using namespace std;
int a[100000];
int n,cnt=0;
void f(int n)
{
    if(n==0) cout<<0<<endl;
    else
    {
        int p=0;//记录进位
        for(int j=0;j<=cnt;j++)//更新每一位
        {
            p=a[j]*n+p;
            a[j]=p%10;
            p=p/10;
        }
        while(p!=0)
        {
            cnt++;
            a[cnt]=p%10;
            p=p/10;
        }
        for(int i=cnt;i>=0;i--)
          cout<<a[i];
    }
}
int main()
{
    string s;
    cin>>s;
    for(int i=s.size()-1;i>=0;i--)
        a[cnt++]=s[i]-'0';
    cnt--;//cnt保证没有前导0
    cin>>n;
    f(n);
    return 0;
}

该代码使用了数组来存储高精度整数,并实现了高精度的乘法运算。在主函数中,输入两个字符串表示的高精度整数,然后调用mul函数进行乘法计算并输出结果。


需要注意的是,该代码中的高精度乘法并没有考虑负数的情况,如果需要支持负数的乘法运算,需要在代码中增加相关的处理逻辑。


C++模拟,利用vector容器直接模拟运算即可  

#include<iostream>
#include<vector>
using namespace std;
vector<int> mul(vector<int>& A,int b)
{
    vector<int> C;
    int t=0;
    for(int i=0;i<A.size();i++)
    {
        t+=A[i]*b;
        C.push_back(t%10);
        t/=10;
    }
    while(t)
    {
        C.push_back(t%10);
        t/=10;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();//去除前导0
    return C;
}
int main()
{
    string a;
    int b;
    cin>>a>>b;
    vector<int> A;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    vector<int> C=mul(A,b);
    for(int i=C.size()-1;i>=0;i--) cout<<C[i];
    return 0;
}

高精度乘法应用

阶乘计算

#include<iostream>
using namespace std;
void f(int n)
{
    if (n == 1)
        cout << "1";
    else
    {
        int a[100000], tail = 0, head = 0, p = 0;
        a[0] = 1;
        for (int i = 2; i <= n; i++) {
            for (int j = head; j <= tail; j++)
            {
                p = a[j] * i + p;
                a[j] = p % 10;
                p = p / 10;
            }
            while (p != 0)
            {
                tail++;
                a[tail] = p % 10;
                p = p / 10;
            }
        }
        for (int i = tail; i >= 0; i--)
            cout << a[i];
    }
}
int main()
{
    int n;
    cin >> n;
    f(n);
    return 0;
}

该代码将阶乘计算分解成了一个个乘法运算。在主函数中,输入一个整数n,然后调用fac函数计算n的阶乘。在fac函数中。

tail用于去除前导0

相关文章
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
2868 0
高精度算法(加、减、乘、除,使用c++实现)
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
33_ LLM的定义与规模化:参数与计算力
在人工智能发展的长河中,2022年底ChatGPT的横空出世标志着大语言模型(LLM)时代的正式开启。自那时起,LLM技术以惊人的速度演进,从实验室走向产业应用,重塑着人类与计算机的交互方式。到2025年,全球LLMs已正式进入"模型即服务"(MaaS)时代,参数量级突破万亿级,成为驱动数字经济发展的核心引擎
|
4月前
|
供应链 监控 搜索推荐
35页PPT|零售行业自助数据分析方法论:指标体系构建平台集成、会员与商品精细化运营实践
在零售行业环境剧变的背景下,传统“人找货”模式正被“货找人”取代。消费者需求日益个性化,购买路径多元化,企业亟需构建统一的指标体系,借助BI平台实现数据驱动的精细化运营。本文从指标体系构建、平台集成到会员与商品运营实践,系统梳理零售经营分析的方法论,助力企业实现敏捷决策与业务闭环。
35页PPT|零售行业自助数据分析方法论:指标体系构建平台集成、会员与商品精细化运营实践
|
索引 Python
Python中的find()和count()方法详解
Python中的find()和count()方法详解
618 3
|
11月前
|
人工智能 数据可视化 数据处理
2025低代码前瞻:平台赋能的无限可能
低代码平台正成为企业数字化转型的核心工具,2025年将迎来新的高峰。其核心功能包括可视化开发、智能引擎、模型驱动、数据处理增强及AI深度融合等,助力高效协作与灵活扩展。通过降低技术门槛、提升开发效率和智能化水平,低代码将赋能企业实现更快的创新和更高的竞争力,推动数字化生态的全面发展。
635 31
|
缓存 前端开发 安全
数据同步原理
数据同步原理
323 10
数据同步原理
|
移动开发 资源调度 JavaScript
【Vue 2】一个高效的低代码表单,可视化设计,一键生成源码,享受更多摸鱼时间!!
【Vue 2】一个高效的低代码表单,可视化设计,一键生成源码,享受更多摸鱼时间!!
|
运维 监控 Kubernetes
高效应对突增流量:构建弹性高性能的SMS网关策略
本篇内容来自于ArchSummit全球架构师峰会演讲实录。
512 1
|
机器学习/深度学习 人工智能 自然语言处理
机器学习中的集成学习(一)
集成学习是一种将多个弱学习器组合成强学习器的方法,通过投票法、平均法或加权平均等策略减少错误率。它分为弱分类器集成、模型融合和混合专家模型三个研究领域。简单集成技术包括投票法(用于分类,少数服从多数)、平均法(回归问题,预测值取平均)和加权平均法(调整模型权重以优化结果)。在实际应用中,集成学习如Bagging和Boosting是与深度学习并驾齐驱的重要算法,常用于数据竞赛和工业标准。
【图片公式识别】图片公式转Word与LaTeX文档:智能识别与转换
【图片公式识别】图片公式转Word与LaTeX文档:智能识别与转换
622 4

热门文章

最新文章