高精度乘法和除法

news2024/11/10 14:37:06

高精度乘法

高精度乘法的核心思想是将两个大数的乘法运算拆解为多个小规模运算,并最终将结果合并得到最后的乘积。
在这里插入图片描述

我们来做一道题

大整数乘法

代码如下:

#include<iostream>
#include<string>
using namespace std;

// 定义两个字符数组 `s1` 和 `s2`,分别用于存储输入的两个大数。
// 定义三个整型数组 `a`、`b` 和 `c`,分别用于存储大数的逆序数值形式,以及最终的乘积结果。
char s1[2005], s2[1005];
int a[2005], b[2005], c[2005];

int main()
{
    int la, lb, lc; // 定义三个变量 `la`、`lb` 和 `lc`,分别表示两个大数的长度及其乘积的长度。

    // 输入两个大数,存储到字符数组 `s1` 和 `s2` 中。
    cin >> s1 >> s2;

    // 计算第一个大数 `s1` 和第二个大数 `s2` 的长度。
    la = strlen(s1);
    lb = strlen(s2);

    // 将两个大数转换为整数数组,并逆序存储。
    // a[1] 对应的是 s1 的最低位(最右边的数字),以此类推。
    // b[1] 对应的是 s2 的最低位(最右边的数字),以此类推。
    for (int i = 0; i < la; i++)
    {
        a[la - i] = s1[i] - '0'; // 将字符转为整数,并倒序存储
    }
    for (int i = 0; i < lb; i++)
    {
        b[lb - i] = s2[i] - '0'; // 同样将 s2 的字符倒序存储为整数
    }

    // 乘积的最大长度不会超过 la + lb,因此 lc 被初始化为 la + lb。
    lc = la + lb;

    // 开始进行大数乘法运算。模拟手工计算过程,将每一位的乘积加到对应的位置。
    for (int i = 1; i <= la; i++)
    {
        for (int j = 1; j <= lb; j++)
        {
            // 计算 a[i] * b[j] 并加到 c[i + j - 1] 位置(模拟手工乘法的进位规则)。
            c[i + j - 1] += a[i] * b[j];

            // 将当前位置的数值向高位进位,避免溢出,确保个位数字留在当前位。
            c[i + j] += c[i + j - 1] / 10;
            c[i + j - 1] %= 10; // 取个位数,放在当前位。
        }
    }

    // 如果乘积最高位 lc 是 0,则去掉该位(最高位无意义)。
    if (c[lc] == 0 && lc > 0)
    {
        lc--; // 减少乘积的实际位数。
    }

    // 从高位开始输出乘积结果。由于存储是倒序的,因此需要从最高位开始输出。
    for (int i = lc; i > 0; i--)
    {
        cout << c[i]; // 输出每一位结果。
    }

    return 0; // 程序正常结束。
}

高精度除法

在这里插入图片描述

我们来做一道题

洛谷P1480

代码如下:

#include<iostream>
#include<cstring>  // 确保包含正确的头文件
using namespace std;

char s1[5005];      // 存储输入的字符串形式的大数
long long b, c[5005], x = 0, a[5005], la, lc;  // 全局变量定义

int main()
{
    // 输入大数和除数
    cin >> s1 >> b;

    // 计算大数的长度
    la = strlen(s1);

    // 将字符串形式的大数转换为数组形式的数值(从下标0开始)
    for (int i = 0; i < la; i++) {
        a[i] = s1[i] - '0';  // 将字符'0'-'9'转换为整数0-9
    }

    // 开始进行大数除法的模拟
    for (int i = 0; i < la; i++) {
        // 计算当前位数的商:先加上前面的余数,再除以b得到当前位商
        c[i] = (x * 10 + a[i]) / b;

        // 计算新的余数:将前面的余数与当前位合并,然后取模b
        x = (x * 10 + a[i]) % b;
    }

    // 找到商的第一个非零位,避免前导零
    lc = 0;
    while (c[lc] == 0 && lc < la) {
        lc++;
    }

    // 输出结果,如果商从头到尾都为0,则只输出0
    if (lc == la) {
        cout << 0;
    } else {
        // 从第一个非零位开始输出商
        for (int i = lc; i < la; i++) {
            cout << c[i];
        }
    }

    return 0;
}

gitee代码源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2146269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑龙江事业单位联考报名流程及照片处理方法

随着黑龙江省事业单位联考的报名帷幕即将拉开&#xff0c;众多考生已经摩拳擦掌&#xff0c;准备投身于这场职业发展的大潮中。在这个关键时刻&#xff0c;掌握报名流程和照片处理技巧&#xff0c;将是你成功迈出的第一步。本文将为你提供一份详尽的报名指南&#xff0c;让你在…

代理模式---静态代理和动态代理

代理模式 代理模式&#xff1a;给某一个对象提供一个代理&#xff0c;并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。 代理模式角色分为 3 种&#xff1a; Subject&#xff08;抽象主题角色&#xff09;&#xff1a;定义代理类和真实主题的公共对外方法…

【JavaScript】算法之排序搜索

排序 冒泡排序 选择排序 插入排序 从第一个元素开始&#xff0c;该元素可以被认为已经被排序取出下一个元素&#xff0c;在已经排序好的序列中&#xff0c;从后往前扫描直到找到小于或者等于该元素的位置将该位置后面的所有已经排序的元素从后往前移动将该元素插入到该位置重复…

鲲鹏云-docker安装mysql8.0-并设置参数(--lower-case-table-names=1)

前言&#xff1a; 由于鲲鹏云是arm架构&#xff0c;公司现有的镜像就用不了&#xff0c;为了搭建个测试环境&#xff0c;记录一下搭建过程 注意在mysql8.0里面lower-case-table-names必须在第一次安装时设置。 ①镜像的获取 鲲鹏镜像pull下来是不能跑的&#xff0c;会提示内…

自我评估与改进:TMS优化自检清单

自我评估与改进&#xff1a;TMS优化自检清单 在当今快速变化的物流行业中&#xff0c;运输管理系统&#xff08;TMS&#xff09;的优化成为企业提升运营效率、降低成本、增强竞争力的关键。为了帮助企业和物流管理者全面评估TMS的运行状况&#xff0c;识别并优化潜在问题&…

优思学院|中国六西格玛研究调查2025

四年前&#xff0c;优思学院与精益六西格玛专业协会&#xff08;LSSPA&#xff09;共同发起了一项具有里程碑意义的调查研究——《中国六西格玛调查研究 2020》。这是中国第一次全面了解六西格玛在本地企业中的发展现状、应用情况以及所面临的挑战和机遇的调研项目。这个调查不…

Matlab进阶绘图第68期—带分组折线段的分区柱状图

上一篇文章分享了分区柱状图的绘制方法&#xff1a; 带分组折线段的分区柱状图是在原始分区柱状图的基础上&#xff0c;再添加分组折线段&#xff0c;用以增加一个对象的表达。 由于Matlab中未收录的带分组折线段的分区柱状图的绘制方法&#xff0c;因此需要大家自行解决。 本…

NEMESIS: NORMALIZING THE SOFT-PROMPT VECTORS OF VISION-LANGUAGE MODELS

文章汇总 发现的现象 动机的描述 Norm增加会导致性能下降&#xff0c;Norm降低会导致性能上升。于是作者提出&#xff1a; 我们需要规范化VLMs中的软提示吗? 实验验证 在左图中的紫色块中可以看到&#xff0c;随着模型性能的上升&#xff0c;Norm value会不断下降。 解决…

RedisTemplate混用带来的序列化问题

最近在工作中发现一个现象&#xff0c;项目中使用了不同的 RedisTemplate 来操作redis&#xff0c;有的同事用默认的 RedisTemplate &#xff0c;有的同事用 StringRedisTemplate。这就导致了我本次遇到的问题&#xff1a; 在一次需求中&#xff0c;我需要从 redis 中取值&…

AIGC产品经理自学不迷路!全网最全AI产品大模型的学习教程!

一、《AI产品经理知识扫盲》 1️⃣【AI的产品形态到底是什么】&#xff1f; 没有固定形态。实际上AI只是一种对传统产品或服务赋能的手段而已&#xff0c;将各种“中间件”&#xff08;通常是一种训练好的模型&#xff0c;当输入一定数据后自动返回一定的输出值&#xff09;、…

【WRF工具】WRF Domain Wizard第一期:软件下载及安装

【WRF工具介绍】WRF Domain Wizard下载及安装 1 WRF Domain Wizard 的主要功能2 使用 WRF Domain Wizard 的步骤2.1 安装 WRF Domain Wizard&#xff1a;2.2 启动 WRF Domain Wizard&#xff1a;2.3 定义计算域&#xff1a;2.4 生成配置文件&#xff1a;2.5 运行 WPS 和 WRF&am…

内核是如何接收网络包的

1、数据如何从网卡到网络协议栈 1.1内核收包的过程 1、数据帧从外部网络到达网卡 2、网卡把数据帧从自己的缓存DMA(拷贝到)和内核共有的RingBuffer上 3、网卡发出硬中断通知CPU 4、CPU响应硬中断&#xff0c;简单处理后发出软中断 5、k’softirqd线程处理软中断&#xff0c;调…

状态估计算法

目录 前言一、贝叶斯滤波二、卡尔曼滤波2.1 KF简介2.2 基本线性模型2.3 KF公式推导2.3.1 预测值2.3.2 先验误差协方差矩阵2.3.3 卡尔曼增益2.3.4 最优估计值2.3.5 后验误差协方差矩阵 2.4 KF算法使用2.5 MATLAB验证2.5 Python验证 三、扩展卡尔曼滤波3.1 EKF原理3.2 MATLAB实现…

基于vue框架的宠物寻回小程序8g7el(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;发布人,宠物分类,宠物信息,接取人,接取信息,完成信息 开题报告内容 基于Vue框架的宠物寻回小程序开题报告 一、研究背景与意义 随着城市化进程的加快和人们生活水平的提高&#xff0c;宠物已成为许多家庭不可或缺的一员。它们不仅为生…

谷歌导入了自我填充密码,不显示

C:\Users\GZDZ\AppData\Local\Google\Chrome\User Data\Default Login Data Login Data-journal 删除上面两个重启就可以了 https://blog.csdn.net/weixin_30940783/article/details/97552679?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandi…

Windows10电脑右下角时间显示到秒

1、打开注册表 快捷键 WIN R 键&#xff0c;输入 regedit 在注册表中找到如下位置 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 在空白位置右击&#xff0c;新建--DWORD(32位)值(D) 3、将新建的数值名称设置为 ShowSecondsInSystemCloc…

AI绘画与摄影新纪元:ChatGPT+Midjourney+文心一格 共绘梦幻世界

文章目录 一、AI艺术的新时代二、ChatGPT&#xff1a;创意的引擎与灵感的火花三、Midjourney&#xff1a;图像生成的魔法与技术的奇迹四、文心一格&#xff1a;艺术的升华与情感的共鸣五、融合创新&#xff1a;AI绘画与摄影实战的无限可能六、应用场景与实践案例AI艺术的美好未…

【Delphi】知道控件名称(字符串),访问控件

在 Delphi 中&#xff0c;可以使用 RTTI&#xff08;运行时类型信息&#xff09; 或其他方法通过对象的名称字符串来访问对象。比如&#xff0c;如果你有一个控件的名称字符串&#xff0c;你希望通过该名称找到并访问实际的控件。 以下是通过 RTTI 以及其他技术&#xff08;如…

react之jsx基础(1)概念和本质

文章目录 JSX 的基本概念1. **语法**2. **表达式**3. **属性**4. **子元素** JSX 的编译过程1. **转换成 JavaScript**2. **React 元素** JSX 的实际应用1. **组件定义**2. **组件嵌套** 总结 当然&#xff0c;以下是对 JSX 的详细讲解&#xff0c;包括其基本概念、语法、编译过…

【vue element-ui】关于删除按钮的提示框,可一键复制

实现效果&#xff1a; Delete: function (id) {this.$confirm(此操作将永久删除该文件, 是否继续?, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,type: warning,center: true,}).then(() > {Delete(id).then(() > {this.$message({type: success,message: 删…