算法入门系列 C/C++语言的高精度乘法(3/4)

您所在的位置:网站首页 高精度乘法c语言代码 算法入门系列 C/C++语言的高精度乘法(3/4)

算法入门系列 C/C++语言的高精度乘法(3/4)

2024-07-01 17:57| 来源: 网络整理| 查看: 265

目录

前言

1.高精度的认识

1.1.高精度是什么?

1.2.为什么需要高精度?

1.3.怎么实现高精度?

2.高精度的逐步实现

2.1如何接受两个超大的数据?

2.2把进位后的数据传入乘法函数进行计算

2.3数组加法函数的实现

前言

hello! 各位学习算法的宝子们大家好啊!很多编程语言都会提到精度问题,相信大家多多少少都了解过

我将陆续介绍 高精度的 加、减、乘、除         

将从三个方面带领大家学习

1.高精度是什么?

2.为什么需要高精度?

3.怎么实现高精度?

认识高精度  → 实现高精度

1.高精度的认识

1.1.高精度是什么?

高精度算法(High Accuracy Algorithm)是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。

将会陆续介绍四种常见的高精度计算,

高精度加法、高精度减法、高精度乘低精度、高精度除低精度

1.2.为什么需要高精度?

我们都知道C语言 long long 最大支持的数据范围是 :

-9223372036854775808~9223372036854775807

在处理一些较大数的运算,这些数甚至超过了unsigned long long的范围: (0~2^64-1=18446744073709551615)。

为了解决这个问题我们发明了高精度这一种算法

1.3.怎么实现高精度?

如图我们知道了怎么把很长的数据存储下来

我们这里非常有必要再用一张图来解释为什么需要逆序处理?

2.高精度的逐步实现 2.1如何接受两个超大的数据?

首先long long 肯定不行,所以我们可以用字符串接收,自己写一个函数顺便逆序处理

#include #include int la,lb; //定义两个字符串接受输入的数字 char sa[100005], sb[100005]; int a[100005],b[100005],v[100005]; //把两组数据,逆序放进 a b的数组 void inputAB() { scanf("%s",&sa); scanf("%s",&sb); //获取字符串长度 la=strlen(sa); lb=strlen(sb); //输入进去 for(int i = 0,j = la-1;i < la;i++,j--)a[i] = sa[j] - '0'; for(int i = 0,j = lb-1;i < lb;i++,j--)b[i] = sb[j] - '0'; }

2.2把进位后的数据传入乘法函数进行计算 int main() { inputAB(); f(a,b); } 2.3数组加法函数的实现 //乘法函数 void f(int a[],int b[]) { int len = la + lb+1; for(int i = 0;i < la;i++) for(int j = 0;j < lb;j++) { int t = a[i]*b[j]; v[i+j] += t; } //处理进位 int t = 0; for(int i = 0;i < len;i++) { v[i] += t; t = v[i] / 10; v[i] %= 10; } //去头0处理 while(v[len-1] == 0&&len >=0)len--; for (int i = len-1; i >= 0; i--)printf("%d",v[i]); if(len == -1)puts("0"); }

好了以上就是我们高精度的乘法的全部内容了

喜欢​的小伙伴看到这里,麻烦三连​+关注

你们的支持就是我创作最大的动力



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3