高精加减
高精加
模拟竖式运算过程
| idx | 0 | 1 | 2 | 3 | ||
|---|---|---|---|---|---|---|
| 数组a | 9 | 7 | 6 | 长度len1 | ||
| 数组b | 8 | 7 | 长度len2 | |||
| 数组a | 逆序排列→ | 6 | 7 | 9 | ||
| 数组b | 7 | 8 | ||||
| x(进位) | 1 | 1 | 1 | |||
| 数组c | 3 | 6 | 0 | 1 |
↓高精加模板代码
#include <bits/stdc++.h>
using namespace std;
const int leng=505;
int a[leng],b[leng],c[leng];
string s1,s2;
int main(){
cin>>s1>>s2;
int len1=s1.size();
int len2=s2.size();
//1.使用数组逆序存放,方便从低位开始相加,char转换成int
for(int i=len1-1;i>=0;i--) a[len1-1-i]=s1[i]-48;
for(int i=len2-1;i>=0;i--) b[len2-1-i]=s2[i]-48;
int i,x=0;//进位
int len=max(len1,len2);
//2.模拟加法,x(进位)+a[i]+b[i]=c[i]
for(i=0;i<len;i++){
c[i]=a[i]+b[i]+x;
x=c[i]/10;
c[i]%=10;//放的是个位
}
c[i]=x;
//3.逆序输出
//前导0
while(c[i]==0&&i>0) i--;
for(;i>=0;i--) cout<<c[i];
return 0;
}
高精减
| idx | 0 | 1 | 2 | 3 | |
|---|---|---|---|---|---|
| 数组a | (反过来读入) | 6 | 7 | 9 | |
| 数组b | 7 | 8 | 7 | ||
| 数组c | 9 | 8 | 1 |
高精减代码↓
#include <bits/stdc++.h>
using namespace std;
const int leng=10090;
int a[leng],b[leng],c[leng];
string s1,s2;
int main(){
cin>>s1>>s2;
int len1=s1.size();
int len2=s2.size();
//处理负号
if(len1<len2 || len1==len2 && s1<s2){
cout<<'-';
swap(s1,s2);
swap(len1,len2);
}
//1.使用数组逆序存放,方便从低位开始相减,char转换成int
for(int i=len1-1;i>=0;i--) a[len1-1-i]=s1[i]-48;
for(int i=len2-1;i>=0;i--) b[len2-1-i]=s2[i]-48;
int i;
//2.模拟减法,a[i]-b[i]=c[i],注意借位
for(i=0;i<len1;i++){
c[i]=a[i]-b[i];
if(c[i]<0){
a[i+1]--;//从被减数上借位
c[i]+=10;
}
}
//3.逆序输出
//前导0
while(c[i]==0&&i>0) i--;
for(;i>=0;i--) cout<<c[i];
return 0;
}

浙公网安备 33010602011771号