本蒟蒻一天内(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了。
杜绝抄袭,从我做起!
完整代码自己写哦~