793.高精度乘法(acwing)

2024-03-10 09:44
文章标签 acwing 高精度 乘法 793

本文主要是介绍793.高精度乘法(acwing),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 793.高精度乘法
    • 题目描述
    • 高精度乘法

793.高精度乘法

题目描述

给定两个正整数A和B,请你计算A * B的值。

输入格式
共两行,第一行包含整数A,第二行包含整数B。

输出格式
共一行,包含A * B的值。

数据范围
1≤A的长度≤100000,
0≤B≤10000
输入样例:

2
3

输出样例:

6

高精度乘法

// 包含C++ STL库的头文件
#include<bits/stdc++.h>
using namespace std;// mul函数用于执行高精度乘法
vector<int> mul(vector<int>& a,int b){vector<int> c; // 存储乘法结果的动态数组int t = 0; // 用于暂存中间结果和进位for(int i = 0; i < a.size() || t; i++){ // 遍历大整数的每一位或直到进位为0if(i < a.size()) t += a[i] * b; // 如果当前位有效,则将其与b相乘并加到t上c.push_back(t % 10); // 将t的个位数作为结果的一部分t /= 10; // 计算进位,准备加到下一位}return c; // 返回乘法结果
}// main函数是程序的入口点
int main(){int b; // 存储整数Bstring a; // 存储大整数A的字符串表示cin >> a >> b; // 从标准输入读取大整数A和整数Bvector<int> A; // 存储大整数A的每一位数字for(int i = a.size() - 1; i >= 0; i--) // 从字符串的末尾开始(即大整数的个位)A.push_back(a[i] - '0'); // 将字符转换为整数并添加到A数组的末尾auto c = mul(A, b); // 调用mul函数计算A和B的乘积,结果存储在c中for(int i = c.size() - 1; i >= 0; i--) // 从结果的最高位开始输出cout << c[i];return 0; // 程序结束}

该程序执行以下步骤:

  1. 读取字符串形式的大整数A和整数B。
  2. 将大整数A反转并转换成单个数字存储在一个vector<int>里面。
  3. 调用mul函数计算乘积。
  4. mul函数通过模拟小学数学中的乘法过程逐位计算A和B的乘积。
  5. 最后,将计算得到的结果vector反转输出,即从最高位到最低位的顺序。

注意,代码没有处理结果前导零的情况,因为在乘法中,除非乘数是0,否则不会出现前导零。此外,由于输入保证B为非负数且A为正整数,所以结果也总是非负的。

这篇关于793.高精度乘法(acwing)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793836

相关文章

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

【AcWing】851. 求最短路

spfa算法其实是对贝尔曼福特算法做一个优化。 贝尔曼福特算法会遍历所有边来更新,但是每一次迭代的话我不一定每条边都会更新,SPFA是对这个做优化。 如果说dist[b]在当前这次迭代想变小的话,那么一定是dist[a]变小了,只有a变小了,a的后继(b)才会变小。 用宽搜来做优化,用一个队列,队列里边存的就是所有变小了的结点(队列里存的是待更新的点)。 基本思路就是我更新过谁,我再拿

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

高精度打表-Factoring Large Numbers

求斐波那契数,不打表的话会超时,打表的话普通的高精度开不出来那么大的数组,不如一个int存8位,特殊处理一下,具体看代码 #include<stdio.h>#include<string.h>#define MAX_SIZE 5005#define LEN 150#define to 100000000/*一个int存8位*/int num[MAX_SIZE][LEN];void

【AcWing】852. spfa判断负环

#include<iostream>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int N= 1e5+10;int n,m;int h[N],w[N],e[N],ne[N],idx;int dist[N],cnt[N];//cnt存最短路径的边数bool st[N];v

高精度计算----减法运算(浮点型)

基于上一贴,修改减法运算适合于高精度浮点型计算。 因为减法比加法难度大一点,考虑的地方也要多一些,可能代码有欠缺,欢迎指出。 运算说明: 1、相减函数依旧没改变,包括上一贴的判断被减数与减数的大小函数也没变。 2、增加两个函数,取小数位数函数和结果处理(回归小数点)函数 3、与加法浮点高精度运算相比,这里改变较多的是结果处理函数,加法加完后,位数不减反增,而且最多增一位。减法会消失掉好多

高精度计算----减法运算

处理大数减法运算: 1、首先要判断被减数与减数哪个更大,再相应的带入减法函数去处理。具体的比较可以使用字符串的相关知识去比较。 2、相减要先对齐数组,依照减数的长度,执行相应的减法运算次数。 3、不需要借位相减的话,直接减去;需要的话,向前借一位,若前一位是0,则再前借(此时前一位的0变为10)。 测试程序效果如下:   以下代码包括相减函数,比较被减数减数函数,若有错误,请指出:

高精度加法,乘法,阶乘

#include <iostream>#include <map>#include <string>#include <algorithm>using namespace std;const int Max = 50000;string str1,str2;/***********乘法***********/void chenfa(){cin >> str1>>str2;int a

高精度治具加工的重要性和创新性

在现代制造业中,高精度治具加工扮演着至关重要的角色。它不仅是生产过程中的关键环节,更是推动行业不断创新和发展的重要力量。时利和将解析高精度治具加工的重要性和创新性。   一、高精度治具加工的重要性   1.确保产品质量   高精度治具能够为生产过程提供准确的定位、夹紧和导向功能,从而确保产品的尺寸精度、形状精度和表面质量。例如,在电子制造领域,高精度的治具可以保证芯片的精确安装,提高电子

乘法问题c++

题目描述 小 A 最近刚刚学习了乘法,为了帮助他练习,我们给他若干个正整数,并要求他将这些数乘起来。 对于大部分题目,小 A 可以精准地算出答案,不过,如果这些数的乘积超过 ,小 A 就不会做了。 请你写一个程序,告诉我们小 A 会如何作答。 输入 第一行一个整数 n,表示正整数的个数。 接下来 n行,每行一个整数a 。小 A 需要将所有的 a乘起来。 保证n<=50,a<=100. 输出