当前位置: 首页 > news >正文

[C++] 高精度乘法

目录

  • 引入: 大整数比较
    • 比较方法
    • 例题1-青蛙计数
      • 题目描述
    • 输入描述
      • 输出描述
      • 输入输出样例
      • AC代码
  • 高精度乘法模版
  • 高精度运算小合集(这集乘法+上集加法)


注意: 若还没有学过高精度运算的话先去看高精度加法


引入: 大整数比较

比较方法

大整数比较可以使用此方法比较(注释有讲解):

/*
如果x比y小, 则返回true
否则(y >= x)返回false
*/
bool cmpBIG(int x[], int y[]){int lx = x[0], ly = y[0]		// 获取x和y的有效长度if(lx != ly) return lx < ly;	// 数位多者大for(int i = lx; i >= 1; i--){	// 大数逆向存储, 逆向遍历获得依次正向的数据if(x[i] != y[i]) return x[i] < y[i];}return false;					// 两个数组完全相同
}

例题1-青蛙计数

题目描述

现在皮皮有n个数和一个幸运数m, 希望你统计一下这n个数中有多少个数不小于m.

输入描述

第 1 行,一个整数n,表示有n个数;
第 2 行,一个整数m,表示幸运数;
第 3~n+2 行有 n 个数a[i], 表示每个数

输出描述

输出只有一个整数ans表示有ans个数不小于m

输入输出样例

input:

 512101151003

output:

2

AC代码

#include <iostream>
#include <string>
#include <cstring>
using namespace std;bool cmpBIG(int x[], int y[]){int lx = x[0], ly = y[0];if(lx != ly) return lx < ly;for(int i = lx; i >= 1; i--){if(x[i] != y[i]) return x[i] < y[i];}return false;
}void s2BIG(string s, int a[]){int len = s.size();for(int i = 1; i <= len; i++){a[i] = s[len - i] - '0';}a[0] = len;
}int m[1010];
int a[1010];int main(){int n, cnt = 0;cin >> n;string m2;cin >> m2;s2BIG(m2, m);for(int i = 1; i <= n; i++){string s;cin >> s;s2BIG(s, a);if(!(cmpBIG(a, m))){cnt++;}memset(a, 0, sizeof(a));}cout << cnt;return 0;
}

高精度乘法模版

/*
高精度*int
*/
void mulBIG(int x[], int y, int z[]){z[0] = x[0];for(int i = 1; i <= z[0]; i++) z[i] = x[i] * y;for(int i = 1; i <= z[0]; i++){z[i + 1] += z[i] / 10;z[i] = z[i ] % 10;if(z[z[0] + 1] > 0) z[0]++;}while(z[0] > 1 && z[z[0]] == 0) z[0]--;
}

高精度运算小合集(这集乘法+上集加法)

void s2BIG(string s, int a[]){int len = s.size();for(int i = 1; i <= len; i++){a[i] = s[len - i] - '0';}a[0] = len;
}void i2BIG(int n, int a[]){int cur = 0;while(n > 0){cur++;a[cur] = n % 10;n /= 10;}if(cur == 0) cur++;a[0] = cur;
}void printBIG(int a[]){int len = a[0];for(int i = len; i > 0; i--){cout << a[i];}cout << endl;
}void addBIG(int x[], int y[], int z[]){z[0] = max(x[0], y[0]);for(int i = 1; i <= z[0]; i++)z[i] = x[i] + y[i];for(int i = 1; i <= z[0]; i++){	z[i + 1] += z[i] / 10;z[i] %= 10;if(z[z[0] + 1] != 0)z[0]++;}
}/*
高精度*int
*/
void mulBIG(int x[], int y, int z[]){z[0] = x[0];for(int i = 1; i <= z[0]; i++) z[i] = x[i] * y;for(int i = 1; i <= z[0]; i++){z[i + 1] += z[i] / 10;z[i] = z[i ] % 10;if(z[z[0] + 1] > 0) z[0]++;}while(z[0] > 1 && z[z[0]] == 0) z[0]--;
}

相关文章:

  • [HOT 100] 1039. 多边形三角剖分的最低得分
  • 判断 ONNX 模型是否支持 GPU
  • Java基础语法10分钟速成
  • 第十六届蓝桥杯大赛软件赛省赛 C/C++ 大学B组 [京津冀]
  • Pygame多人游戏开发:本地双人对战实战
  • Java 异常处理全解析:从基础到自定义异常的实战指南
  • 中式烹饪实训室构建与实施
  • Datawhale AI春训营 AI4S蛋白质赛道学习笔记
  • Maven插件下载失败?三步解决SSL握手错误与镜像配置
  • CentOS之软件包管理系统
  • Web端ER可视化
  • 元数据驱动的 AI 开发:从数据目录到模型训练自动化
  • Jetpack Room 使用详解(下)
  • 深度学习中的预训练与微调:从基础概念到实战应用全解析
  • JSP实现用户登录注册系统(三天内自动登录)
  • Unity中数据储存
  • w308汽车销售系统的设计与实现
  • 华为盘古OS深度评测:构建AI自进化系统的实践密码
  • 2025.04.26-淘天春招笔试题-第二题
  • DIFY 浅尝 - DIFY + Ollama 添加模型
  • “麒麟王”亮相上海彩市,体彩即开票“瑞兽家族”迎来新成员
  • 论法的精神︱张玉敏:知识产权保护要为社会经济文化发展服务
  • 宁波银行一季度净利74.17亿元增5.76%,不良率持平
  • 4月份全国93个国家气象站日最高气温达到或突破极值
  • 专业竞演、剧场LIVE直播,32位越剧新星逐梦上海
  • 央行副行长:我们在研究丰富政策工具箱,将适时推出增量政策