高精度加减|全是干货!!!
2024-10-05 18:46:07
发布于:浙江
高精度加减
如何处理过大的数字进行加减运算?
- 我们需要把数字的每一位放置于数组当中
- 模拟竖式加法与减法的运算
- 判断最高位的所处位置
- 输出方法
储存数字
我们会使用String与Char数组来保存输入的数据内容,只有这两个数据类型可以成功的保存过大的数字。
为了使得计算的位数对其,我们选择逆序存储数字到普通的数组当中来方便进行计算
int len = s.size();
for(int i = 0 ; i < len ; i ++ ){
a[i] = s[len - i - 1] - '0' ;
}//逆序存储的操作
模拟竖式计算
在加法当中,我们会选择将a[i]
+ b[i]
进行判断,假若大于等于10,则将答案的数字c[i + 1]的位置提前+1
,以此表达进位。
for(int i = 0 ; i < len ; i ++ )
{
c[i] += a[i] + b[i];
if(c[i] >= 10)
{
c[i] %= 10;
c[i+1] += 1;
}
}
减法在计算的过程当中,会碰到所谓借位的情况,向更高位借1,在当前位作为10使用。
for(int i = 0 ; i < len ; i ++ )
{
c[i] += a[i] - b[i] ;
// 借位
if(c[i] < 0 )
{
c[i + 1] -= 1;
c[i] += 10;
}
}
而这样的做法通常要求a绝对大于等于b,因此计算前,需要判断a和b的大小关系。
判断最高位
加法
只需要判断当前的len位是否为零。
减法
从len位开始,判断是否为0,若位0则逐步递减到1位,最少保留一位。
逆序输出
这里空空如也
有帮助,赞一个