用c++写一个高精度计算的乘法运算
用c++写一个高精度计算的乘法运算
这段代码是一个用C++编写的程序,它实现了两个大整数的乘法运算。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int main(){char a1[101]="222",b1[101]="2";int a[101],b[101],c[10001],lena,lenb,lenc,i,j,x;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));lena=strlen(a1);lenb= strlen(b1);for(i=0;i<lena;i++){a[lena-i]=a1[i]-48;}for(i=0;i<lenb;i++){b[lenb-i]=b1[i]-48;}for(i=1;i<=lena;i++){x=0;//用于存放进位for(j=1;j<=lenb;j++){//对乘数的每一位进行处理c[i+j-1]=a[i]*b[j]+x+c[i+j-1];//当前乘积+上次乘积进位+原数x=c[i+j-1]/10;c[i+j-1]%=10;}c[i+lenb]=x;}lenc=lena+lenb;while(c[lenc]==0 && lenc>1){lenc--;}for(i=lenc;i>=1;i--){cout<<c[i];}cout<<endl;
}
虽然它相对简短,但其中包含了一些较为复杂的编程概念和难点:
-
大整数的表示:代码涉及的主要难点是如何处理和表示大整数,因为大整数通常会超出内置整数类型的范围。在代码中,大整数被表示为字符数组
a1
和b1
,而在执行乘法运算时,它们被分解为整数数组a
和b
,这需要理解如何将字符数字转换为整数表示。 -
逐位运算:乘法运算通常需要逐位执行,这意味着对每一位数字执行乘法,然后将结果相加。这需要理解如何在循环中逐位处理数组,同时注意进位的问题。
-
进位处理:在乘法运算中,每一位的乘法结果都可能产生进位,需要正确地处理进位。代码中使用了变量
x
来存储进位,然后更新每一位的结果并将进位传递到下一位。 -
数组长度管理:代码中使用
lena
和lenb
分别表示两个乘数的长度,以及lenc
表示结果的长度。正确管理数组的长度很重要,以确保结果不会溢出或包含不必要的零。 -
结果的输出:代码在计算结束后,需要正确输出结果。这包括去除高位的零并逆序输出结果。
最新文章
- Git企业开发级讲解(二)
- uniapp中input框聚焦
- Word2Vec浅谈
- 【科研新手指南4】ChatGPT的prompt技巧 心得
- 这 11 个 for 循环优化你得会
- Unity C# 打开windows对话框选择文件夹或选择文件
- echarts 同x轴半实线半虚线图表
- 6.6二叉树的最大深度(LC104
- 【数据结构】经典单链表OJ题!!
- 基于机器学习的卫片航片变化检测
- 2023.11.12使用flask对图片进行黑白处理(base64编码方式传输)
- 使用 Stable Diffusion Img2Img 生成、放大、模糊和增强
- PyCharm鼠标控制字体缩放
- 【Windows】安装绿色版Mysql数据库
- 算法分析与设计考前冲刺 (算法基础、数据结构与STL、递归和分治、 动态规划、贪心算法、 回溯算法)
- CM Lab Vortex Studio 安装与配置
- thinkphp5 连接多个服务器数据库
- 1 Supervised Machine Learning Regression and Classification
- 【KVM
- 利用Python群组分析方法剖析客户行为