程序员必会系列 C语言的高精度加法(其一)
  v5pOD0gGCm3n 2023年11月02日 72 0


 目录

前言

高精度是什么?

为什么需要高精度?

怎么实现高精度?

高精度的逐步实现

(1)如何接受两个超大的数据?

(2)怎么把字符串给处理?逆序存入数组?

(3)数组加法函数的实现


前言

程序员必会系列 C语言的高精度加法(其一)_字符串程序员必会系列 C语言的高精度加法(其一)_数组_02编辑hello! 各位学习算法的宝子们大家好啊!很多编程语言都会提到精度问题,相信大家多多少少都了解过

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

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

1.高精度是什么?

2.为什么需要高精度?

3.怎么实现高精度?


认识高精度   实现高精度

高精度是什么?

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

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

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

为什么需要高精度?

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

-9223372036854775808~9223372036854775807

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

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

怎么实现高精度?

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

程序员必会系列 C语言的高精度加法(其一)_字符串_03

程序员必会系列 C语言的高精度加法(其一)_字符串_04编辑

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

程序员必会系列 C语言的高精度加法(其一)_数组_05

程序员必会系列 C语言的高精度加法(其一)_字符串_06编辑

高精度的逐步实现

(1)如何接受两个超大的数据?

首先long long 肯定不行,所以我们可以用字符串接收

int main()
{
    //定义两个字符串接受输入的数字
    char sa[N], sb[N];
    int a[N],b[N];
    scanf("%s",&sa);
    scanf("%s",&sb);
    
    return 0;
}

程序员必会系列 C语言的高精度加法(其一)_数组_07

(2)怎么把字符串给处理?逆序存入数组?

int main()
{
    //定义两个字符串接受输入的数字
    char sa[N], sb[N];
    int a[N],b[N];
    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';

    f(a,b);//把反转后的数组传入到我们计算加法的函数里
    return 0;
}

程序员必会系列 C语言的高精度加法(其一)_高精度_08

(3)数组加法函数的实现

void f(int a[],int b[])
{
    //确定最大的位数
    int i = 0,t = 0,v[N];
    int len = la > lb ? la : lb;

    //按位进行加法
    for(i = 0; i < len; i++){
        v[i] = a[i] + b[i];
        v[i] += t;
        t = v[i]/10;
        v[i] %= 10;
    }
    //如果最后有进位 数组在加一位存进位
    if(t!=0)v[i++]=t;

    //倒叙运算的数 再倒叙输出
    for(int j=i-1;j>=0;j--)printf("%d",v[j]);
}

程序员必会系列 C语言的高精度加法(其一)_字符串_09

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

喜欢程序员必会系列 C语言的高精度加法(其一)_数组_10程序员必会系列 C语言的高精度加法(其一)_数组_11编辑的小伙伴看到这里,麻烦三连程序员必会系列 C语言的高精度加法(其一)_字符串_12程序员必会系列 C语言的高精度加法(其一)_字符串_13编辑+关注程序员必会系列 C语言的高精度加法(其一)_数组_14程序员必会系列 C语言的高精度加法(其一)_字符串_15编辑

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



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gBkHYLY8jvYd   2023年12月10日   22   0   0 #include数组i++
v5pOD0gGCm3n