【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)(附百度网盘下载地址)
3051 0
JDK API文档中文版(1.6、1.8、1.9)(附百度网盘下载地址)
|
SQL 数据可视化 大数据
大数据Hive行列转换应用与实现
大数据Hive行列转换应用与实现
187 0
|
11月前
|
编译器 图形学
Unity用脚本获取物体和组件(下)
Unity用脚本获取物体和组件(下)
254 0
|
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了。
494 0
Unity通过组件名称字符串添加脚本
|
图形学
浅谈Unity之生成水平面的网格线
RenderFeature的应用(生成水平面的网格线)
|
弹性计算 Linux 数据安全/隐私保护
使用 ECS 轻松部署 Docker
在本实验中,您将学习如何在阿里云云服务器ECS上基于CentOS 7.9操作系统部署并使用Docker。
754 0
|
PyTorch 算法框架/工具
使用pytorch相关库进行标准化
以上代码中,我们首先将输入数据转换为张量格式,然后使用transforms.Normalize对数据进行标准化处理,其中mean和std参数分别表示每个通道的均值和标准差,这里我们使用x_data的整体均值和标准差来进行标准化。 需要注意的是,这种标准化方法仅适用于单通道输入数据,如果输入数据是多通道(如RGB图像),则需要按通道计算均值和标准差,并将其传递给transforms.Normalize函数。
339 0
|
SQL Oracle Java
Hive正则表达式
Hive正则表达式
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch 保存和提取训练好的神经网络
Pytorch 保存和提取训练好的神经网络
Pytorch 保存和提取训练好的神经网络
|
机器学习/深度学习 算法
【多任务损失函数】浅谈多任务中的损失函数如何定义与优化
【多任务损失函数】浅谈多任务中的损失函数如何定义与优化
927 0
【多任务损失函数】浅谈多任务中的损失函数如何定义与优化