03.高精度加法

本蒟蒻一天内(2023/02/08/) 第三篇博客(但还是第一篇正式的)

今天来看一看高精度加法怎么做。

本人是个**,请大佬多多指教

我们平常都喜欢这样做:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0;
}

有些时候为了保险,就会开

long long

实在不行还要开

unsigned long long

但是long long 也只能解决-2³¹~2³¹-1

unsigned long long 也就是long long的两倍(没有负数)

如果题目数据过大,就只可以用高精度。

好了,那我们想想我们该怎么计算高精度加法呢?

先想想,我们一年级算加法怎么算的?

是不是就是列竖式?

假设我们算123+6789

竖式:

                1     2   3

+         6   7  ₁ 8 ₁ 9

           6   9     1   2

如果要用代码来写的话,那么我们就用字符串输入。

那么字符串是首位对齐,但是,我们加法是要末尾对齐,所以?

我们要把字符串倒序一下!!!

	for(int i=A.length()-1,j=1;i>=0;i--,j++)
		a[j]=A[i]-'0';
	for(int i=B.length()-1,j=1;i>=0;i--,j++)
		b[j]=B[i]-'0';

这样就末尾对齐了。

让后我们可以再开另一个数组,来存储和。

我们还要考虑进位。

进位就是保留和的个位,把十位的数字加到更高位上。

	for(int i=1;i<=len;i++){
		c[i]+=a[i]+b[i];//求和
		c[i+1]=c[i]/10;//进位,把十位进上去
		c[i]=c[i]%10;//把个位留下来
	}

但是,我们在这里,代码并不是可以直接输出了。

为什么呢??

因为,我们加完后,可能会发现和的最高位是0,但是最高位不可以是0.

我们就要执行一个去0操作。

	if(c[len+1])
		len++;

但是也不可以一个0也不剩,因为如果和就是0,再把这个0去掉,就输出空气了。

最后倒序输出c数组就ok了。

杜绝抄袭,从我做起!

完整代码自己写哦~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值