高精度加法
#include<iostream>
#include<cstring>
using namespace std;
int main(){
// 1、获取高精度数:字符数组 & 字符串
char a1[505], b1[505];
int a[505]={}, b[505]={}, c[505]={};
cin>>a1>>b1;
int lena = strlen(a1);
int lenb = strlen(b1);
int lenc = max(lena, lenb);
// 2、把字符数字变成整型的数组,并且倒序存储
// 倒序数组a
for(int i=0;i<lena;i++){
a[i] = a1[lena-1-i]-'0';
}
// 倒序数组b
for(int i=0;i<lenb;i++){
b[i] = b1[lenb-1-i]-'0';
}
// 3、对位相加
int x = 0; // 记录进位情况
for(int i=0;i<lenc;i++){
// a + b = c
c[i] = a[i] + b[i] + x;
x = c[i]/10; // 计算进位情况
c[i] %= 10; // 进位完了只剩个位
}
// 判断最高位是否产生进位
if(x == 1) c[lenc++] = x;
// 倒序输出结果
return 0;
}
高精度减法
#include<iostream>
using namespace std;
// a > b => a - b
// a < b => - (b - a)
// a>=b为真 否则为假
bool cmp(string a, string b){
int lena = a.length();
int lenb = b.length();
if(lena != lenb) return lena > lenb;
for(int i=0;i<lena;i++){
if(a[i] != b[i]) return a[i]>b[i];
}
return 1;
}
int a[10090]={},b[10090]={},c[10090]={};
int main(){
// 1、获取高精度数:字符数组 & 字符串
string a1, b1;
cin>>a1>>b1;
// 1.1、字符串大小比较的函数
if(cmp(a1,b1)==0){
cout<<"-"; // a1 - b1 < 0
// 交换a1 和 b1,达到始终是a1-b1的效果
string t = a1; a1 = b1; b1 = t;
}
// 2、把字符数字变成整型的数组,并且倒序存储
int lena = a1.length(); // 被减数a1的长度
int lenb = b1.length(); // 减数b1的长度
int lenc = lena;
for(int i=0;i<lena;i++){
a[i] = a1[lena-1-i]-'0';
}
for(int i=0;i<lenb;i++){
b[i] = b1[lenb-1-i]-'0';
}
// 3、减法
for(int i=0;i<lenc;i++){
c[i] = a[i] - b[i];
if(c[i]<0){
c[i] += 10;
a[i+1]--;
}
}
// 去除多余的前导0
while(c[lenc-1]==0 && lenc>1) lenc--;
// 倒序输出结果
for(int i=lenc-1;i>=0;i--){
cout<<c[i];
}
return 0;
}