关于大数乘法的数组类型问题(int 还是char)
可以知道在处理高精度乘法的时候,我们是不考虑当场进位的,在所有位数都模拟完竖式乘法后才进行逐位进位,这就要求存储每个位的数组保证不会爆掉溢出
众所周知char类型最多只能存储到255,非常非常容易溢出成负数,对于char型数组要考虑每一步乘法都要进位。
而int型数组最大21亿就不用考虑这种问题,当然是在内存允许的前提下
P1045 [NOIP2003 普及组] 麦森数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn),举个例子

这道题要求高精度的乘法,我一开始开的就是char型数组,当输入P较小时尚可,当P超过50时就会爆负数,我真的会谢,找了半天没找到问题,最终发觉应该是char型变量爆了,随后改为int就好了
如图
void Big_Multiple(char A[], char B[], int* lena, int lenb)
{
char C[1000000]={0};
for (int i = 0; i < *lena; i++)
{
for (int j = 0; j < lenb; j++)
{
C[i + j] += A[i] * B[j];
}
}
int lenc = *lena + lenb - 1;
int last = 0;
for (int i = 0; i < lenc; i++)
{
int Temp = C[i] + last;
C[i] = Temp % 10;
last = Temp / 10;
}
while (last)
{
C[lenc++] = last % 10;
last /= 10;
}
for (int i = 0; i < lenc; i++)
A[i] = C[i];
*lena = lenc;
}
char型数组,结果如下

(算的是2的P次方,用了快速幂),可以看到当P大于30就开始爆负数了
下面是改为int后的
void Big_Multiple(int A[], int B[], int* lena, int lenb)
{
int C[1000000]={0};
for (int i = 0; i < *lena; i++)
{
for (int j = 0; j < lenb; j++)
{
C[i + j] += A[i] * B[j];
}
}
int lenc = *lena + lenb - 1;
int last = 0;
for (int i = 0; i < lenc; i++)
{
int Temp = C[i] + last;
C[i] = Temp % 10;
last = Temp / 10;
}
while (last)
{
C[lenc++] = last % 10;
last /= 10;
}
for (int i = 0; i < lenc; i++)
A[i] = C[i];
*lena = lenc;
}

可以看到即使P为10000还没爆负数,完美
当然不难发现我们并不需要将所有数组都开成int型,只有一个数组需要为int型那就是高精度乘法时接受加和的那个数组,其他数组为char型即可
void Big_Multiple(char A[], char B[], int* lena, int lenb)
{
int C[1000000]={0};//就是这个数组需要设为int型,其他数组设为char型即可
for (int i = 0; i < *lena; i++)
{
for (int j = 0; j < lenb; j++)
{
C[i + j] += A[i] * B[j];
}
}
int lenc = *lena + lenb - 1;
int last = 0;
for (int i = 0; i < lenc; i++)
{
int Temp = C[i] + last;
C[i] = Temp % 10;
last = Temp / 10;
}
while (last)
{
C[lenc++] = last % 10;
last /= 10;
}
for (int i = 0; i < lenc; i++)
A[i] = C[i];
*lena = lenc;
}
关于大数乘法的数组类型问题(int 还是char)的更多相关文章
- hdu_1042(模拟大数乘法)
计算n! #include<cstring> #include<cstdio> using namespace std; ]; int main() { int n; whil ...
- HDOJ-1042 N!(大数乘法)
http://acm.hdu.edu.cn/showproblem.php?pid=1042 题意清晰..简单明了开门见山的大数乘法.. 10000的阶乘有35000多位 数组有36000够了 # i ...
- PAT 1023 Have Fun with Numbers[大数乘法][一般]
1023 Have Fun with Numbers (20)(20 分) Notice that the number 123456789 is a 9-digit number consistin ...
- 大数乘法的C代码实现
在C语言中,宽度最大的无符号整数类型是unsigned long long, 占8个字节.那么,如果整数超过8个字节,如何进行大数乘法呢? 例如: $ python Python 2.7.6 (def ...
- 算法提高 P1001【大数乘法】
当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法.具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果 ...
- 最短的计算大数乘法的c程序
#include <stdio.h> char s[99],t[99]; int m,n; void r(int i,int c) { int j=0,k=i; while(k)c+=s[ ...
- 大数乘法(A * B Problem Plus)问题
大数乘法问题一般可以通过将大数转换为数组来解决. 解题思路 第1步 第2步 第3步 第4步 样例输入1 56 744 样例输出1 800 样例输入2 -10 678 样例输出2 -6780 样例输入3 ...
- 蓝桥杯算法提高 P1001(大数乘法)
算法提高 P1001 时间限制:1.0s 内存限制:256.0MB 当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法. 具体 ...
- 51nod 1027大数乘法
题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...
- [POJ] #1001# Exponentiation : 大数乘法
一. 题目 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 156373 Accepted: ...
随机推荐
- SCA 技术进阶系列(二):代码同源检测技术在供应链安全治理中的应用
直击痛点:为什么需要同源检测 随着 "数字中国" 建设的不断提速,企业在数字化转型的创新实践中不断加大对开源技术的应用,引入开源组件完成应用需求开发已经成为了大多数研发工程师开发软 ...
- threejs第一个案例
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...
- Vue大数据可视化(大屏展示)解决方案
DataV:组件库基于Vue (React版) ,主要用于构建大屏(全屏)数据展示页面即数据可视化 官网地址: http://datav.jiaminghi.com/guide/#%E7%94%A8% ...
- python常见面试题讲解(十二)句子逆序
题目描述 将一个英文语句以单词为单位逆序排放.例如"I am a boy",逆序排放后为"boy a am I"所有单词之间用一个空格隔开,语句中除了英文字母外 ...
- 每天学五分钟 Liunx 000 | 计算机与 Liunx
计算机 计算机是具有数据处理与逻辑运算的机器. 它有输入单元,输出单元,CPU 内部的控制单元,逻辑处理单元以及内存组成. 输入单元如鼠标键盘等输入设备: 输出单元如打印机,显示屏,等输出 ...
- 基于python+django的电影搜索网站-搜索引擎系统设计与实现
该项目是基于python的web类库django开发的一套web网站,给师弟做的课程设计. 本人的研究方向是一项关于搜索的研究项目.在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索 ...
- 【C++】枚举作为类函数返回值时需定义在使用之前
枚举定义在前,作为函数返回值在后 枚举定义在后,则函数返回值需用普通类型
- Vue-自定义icon实现
在项目中引入了element-ui之后,发现其内置的icon有限,无法满足项目的需求,因此需自定义icon来实现需求. 在vue项目的components下新建SvgIcon目录,在SvgIcon目录 ...
- [转帖]TiKV 内存调优
TiDB试用 来源:TiDB 浏览 87 扫码 分享 2023-05-09 09:02:19 TiKV 内存参数性能调优 参数说明 TiKV 内存使用情况 TiKV 机器配置推荐 TiKV 内存参数 ...
- [转帖]auto_explain
https://help.kingbase.com.cn/v8/development/sql-plsql/ref-extended-plug-in/auto_explain.html 6.1. 插件 ...