C++ 算法 高精度(较详细.)

本文介绍了C++中处理高精度计算的方法,包括高精度加法、减法、乘法和除法。通过使用字符串存储大数字,模拟数学竖式运算,详细讲解了每个运算过程中的关键步骤,如数据接收、存储、进位和借位处理。对于除法,分别阐述了高精度数除以低精度数和高精度数之间的除法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                概念       

        在我们进行计算的过程中,经常会遇到几十位,甚至几百位的数字的计算问题,也有可能会遇到小数点后几十位,几百位的情况,而我们面对这样的情况下,long long  和 double 的数据范围显然是不够使用的了。因此这时,我们就需要引入一个新的算法,叫做高精度算法 .

         我们可以利用程序设计的方法去实现这样的高精度计算 . 介绍常用的几种高精度计算的方法 .

思想

        高精度算法本质上是用字符串模拟数字进行计算,再利用类似于数学里的竖式的形式,一位一位进行相关计算 .

处理

高精度计算中需要处理好以下几个问题:

1)数据的接收方法和存储方法

        数据的接收和存储:当输入的数很长时,可采用字符串方式输入,这样可输入位数很长的数,利用字符串函数和操作运算,将每一位取出,存入数组中 .

void init(int a[]) { // 传入数组
    string s;
    cin >> s; 
    len = s.length(); // s.length --> 计算字符串位数
    for(int i=1; i<=len; i++)     
        a[i] = s[len -i] - '0'; //将字符串s转换为数组a, 倒序存储
}

2)进位、借位的处理.

// 加法进位: c[i] = a[i] + b[i]

code:    if(c[i] >= 10) {
            c[i] %= 10;
            ++c[i++];
         }

//减法借位: c[i] = a[i] - b[i]

code:    if(a[i] < b[i]) {
             --a[i+1];
             a[i] += 10;   
         } 

//乘法进位: c[i + j - 1] = a[i] * b[j] + x + c[i + j - 1];
          x = c[i + j - 1] / 10;
          c[i + j - 1] % 10;

高精度加法 +

        输入两个数到变量中,然后用赋值语句求它们的和后输出 . But,我们知道,在 C++ 语言中任何数据类型都有一定表示范围. 当两个加数很大时,以前的算法显然不能求出精确解,因此我们需要寻求另一种方法 .在读小学时,我们做加法都采用竖式方法 . 这样我们方便写出两个整数相加的算法 .

评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值