【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 API
JDK API文档中文版(1.6、1.8、1.9)(附百度网盘下载地址)
JDK API文档中文版(1.6、1.8、1.9)(附百度网盘下载地址)
1805 0
JDK API文档中文版(1.6、1.8、1.9)(附百度网盘下载地址)
|
Linux iOS开发 MacOS
typora下载和破解(仅供学习)
Typora 一款 Markdown 编辑器和阅读器 风格极简 / 多种主题 / 支持 macOS,Windows 及 Linux 实时预览 / 图片与文字 / 代码块 / 数学公式 / 图表 目录大纲 / 文件管理 / 导入与导出 ……
136838 8
typora下载和破解(仅供学习)
|
6月前
|
Docker 容器
error during connect: this error may indicate that the docker daemon is not running
error during connect: this error may indicate that the docker daemon is not running
199 0
|
8月前
|
SQL 数据可视化 大数据
大数据Hive行列转换应用与实现
大数据Hive行列转换应用与实现
119 0
|
存储
【7. 高精度除法】
思路: > - 高精度整数除以低精度的整数,商为C,余数为r。 > - 从高位依次除以低精度整数。商(C)存在数组中,`r * 10 + 后一位`,继续除以低精度整数。一直循环结束。 > - 去掉前导0
216 0
【7. 高精度除法】
|
C# 图形学
Unity通过组件名称字符串添加脚本
通过Type.GetType(string typeName)来得到字符串对应的Type。 Type.GetType(typeName)能获取到自定义类的类型,但是获取Unity的组件不行。 例如Type.GetType(“Rigidbody”)值为null,其实是少了程序集。 string qualifiedName = typeof(Rigidbody).AssemblyQualifiedName; ty 获取Unity的组件程序集全名,再通过Type.GetType()得到的就不为null了。
456 0
Unity通过组件名称字符串添加脚本
|
12月前
|
弹性计算 Linux 数据安全/隐私保护
使用 ECS 轻松部署 Docker
在本实验中,您将学习如何在阿里云云服务器ECS上基于CentOS 7.9操作系统部署并使用Docker。
682 0
|
人工智能 算法 BI
基础算法-差分矩阵
基本思路 如果将差分可以看作是一维差分,那么差分矩阵便是二维差分,与二维前缀和也就是子矩阵的和相对应,互为逆运算。
|
PyTorch 算法框架/工具
使用pytorch相关库进行标准化
以上代码中,我们首先将输入数据转换为张量格式,然后使用transforms.Normalize对数据进行标准化处理,其中mean和std参数分别表示每个通道的均值和标准差,这里我们使用x_data的整体均值和标准差来进行标准化。 需要注意的是,这种标准化方法仅适用于单通道输入数据,如果输入数据是多通道(如RGB图像),则需要按通道计算均值和标准差,并将其传递给transforms.Normalize函数。
269 0
|
PyTorch 算法框架/工具
pytorch中,如何将一个网络参数传给另一个相同网络的参数?
要将一个网络的参数传递给另一个相同网络的参数,可以使用state_dict()方法和load_state_dict()方法。 假设有两个相同的网络net1和net2,它们具有相同的网络结构,但是它们的权重和偏差不同。
813 0