【6. 高精度乘法】

简介: 高精度整数乘以低精度的整数,将`较小的数看成整体`,高精度整数的每一位,依次乘以低精度整数>- 下一位与小的整数相乘,并且再加上进位。> - 去掉前导0,因为结果可能是0123456

高精度乘法

思路:

  • 高精度整数乘以低精度的整数,将较小的数看成整体,高精度整数的每一位,依次乘以低精度整数
  • 下一位与小的整数相乘,并且再加上进位。
  • 去掉前导0,因为结果可能是0123456

具体步骤

  1. 高精度整数A低精度整数b倒序排放在数组中
  2. 高精度整数的每一位,依次乘以低精度整数这个整体。
  3. 考虑进位,(A * b + t) %10 为结果,(A * b + t) / 10为进位.
  4. 去掉前导0,因为结果可能是0123456
  5. 将C中数数字,倒序打印输出。

举例:

1661149558217.png

1661149579051.png

代码

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

vector<int> mul(vector<int> &A, int b)
{
   vector<int> C;
   int t = 0;         //最开始的t0 = 0;
   for (int i = 0; i < A.size() || t; i ++)
   {
       if(i < A.size()) t += A[i] * b;
       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');
   
   auto C = mul(A,b);
   
   for (int i = C.size() - 1; i >= 0; i --)printf("%d", C[i]);
}

核心算法可以改成:

vector<int> mul(vector<int> &A, int b)
{
   vector<int> C;
   int t = 0;         //最开始的t0 = 0;
   for (int i = 0; i < A.size() ; i ++)
   {
       t += A[i] * b;
       C.push_back(t % 10);
       t /= 10;                
   }                            
   if (t != 0) C.push_back(t);   //此时t有多种情况,可能为0(不进位),可能进位为1,也可能进位大于1
                                //加法这里只有俩种情况,要么进位,进位只进 1,要么不进位
   
   while (C.size() > 1 && C.back() == 0) C.pop_back();  //去掉前导0;
   return C;
}
目录
相关文章
|
Java Spring
Spring - @Transactional 回滚问题
Spring - @Transactional 回滚问题
442 0
|
网络协议 关系型数据库 MySQL
|
前端开发 Shell 开发工具
前端开发工具 vscode 使用技巧篇:控制台由powershell切换为cmd方法,windows下新旧版控制台cmd与powershell互切方法
前端开发工具 vscode 使用技巧篇:控制台由powershell切换为cmd方法,windows下新旧版控制台cmd与powershell互切方法
499 0
前端开发工具 vscode 使用技巧篇:控制台由powershell切换为cmd方法,windows下新旧版控制台cmd与powershell互切方法
|
弹性计算 Linux 数据安全/隐私保护
使用 ECS 轻松部署 Docker
在本实验中,您将学习如何在阿里云云服务器ECS上基于CentOS 7.9操作系统部署并使用Docker。
777 0
|
PyTorch 算法框架/工具
使用pytorch相关库进行标准化
以上代码中,我们首先将输入数据转换为张量格式,然后使用transforms.Normalize对数据进行标准化处理,其中mean和std参数分别表示每个通道的均值和标准差,这里我们使用x_data的整体均值和标准差来进行标准化。 需要注意的是,这种标准化方法仅适用于单通道输入数据,如果输入数据是多通道(如RGB图像),则需要按通道计算均值和标准差,并将其传递给transforms.Normalize函数。
358 0
|
PyTorch 算法框架/工具
pytorch中,如何将一个网络参数传给另一个相同网络的参数?
要将一个网络的参数传递给另一个相同网络的参数,可以使用state_dict()方法和load_state_dict()方法。 假设有两个相同的网络net1和net2,它们具有相同的网络结构,但是它们的权重和偏差不同。
996 0
|
人工智能 算法 决策智能
动态规划之背包问题(01背包问题、完全背包问题、方案数填满型背包问题)
动态规划之背包问题(01背包问题、完全背包问题、方案数填满型背包问题)
385 1
|
机器学习/深度学习 算法
DL之DNN:基于sklearn自带california_housing加利福尼亚房价数据集利用GD神经网络梯度下降算法进行回归预测(数据较多时采用mini-batch方式训练会更快)
DL之DNN:基于sklearn自带california_housing加利福尼亚房价数据集利用GD神经网络梯度下降算法进行回归预测(数据较多时采用mini-batch方式训练会更快)

热门文章

最新文章