1.步骤
1.字符串输入
2.倒序存储给数字数组
3.进行加减法要进位或借位
4.倒序输出
2.高精度加法
#include <iostream>
using namespace std;
int main(){
string c1,c2;
cin >> c1 >> c2;
int a[1000] = {},b[1000] = {},c[1000] = {},jin = 0;
int len1 = c1.length(),len2 = c2.length();
for (int i = 0; i < len1; i++){
a[len1-1-i] = c1[i]-'0';
}
for (int i = 0; i < len2; i++){
b[len2-1-i] = c2[i]-'0';
}
int len = max(len1,len2);
for (int i =0; i < len; i++){
c[i] = a[i] + b[i] +jin;
jin = c[i]/10;
c[i] = c[i] % 10;
}
if (jin !=0) {
c[len++] = jin;
}
for (int i = 0; i < len; i++){
cout << c[len-1-i];
}
return 0;
}
3.高精度减法
#include <iostream>
using namespace std;
int main(){
string c1,c2;
cin >> c1 >> c2;
int a[1000] = {},b[1000] = {},c[1000] = {},jin = 0;
int len1 = c1.length(),len2 = c2.length();
if (len1 < len2 || c1 < c2 && len1 == len2){
swap(c1,c2);
swap(len1,len2);
cout << "-";
}
for (int i = 0; i < len1; i++){
a[len1-1-i] = c1[i]-'0';
}
for (int i = 0; i < len1; i++){
b[len2-1-i] = c2[i]-'0';
}
for (int i =0; i < len1; i++){
if (a[i] < b[i]){
a[i] += 10;
a[i+1] --;
}
c[i] = a[i] - b[i];
}
while (c[len1-1] ==0 and len1 > 1){
len1 --;
}
for (int i = 0; i < len1; i++){
cout << c[len1-1-i];
}
return 0;
}
4.高精度乘法
中间计算过程是先乘再进位。
#include <bits/stdc++.h>
using namespace std;
int main(){
char c1[205], c2[205];
int a[205] = {}, b[205] = {}, c[405] = {};
scanf("%s %s", c1, c2);
int len1 = strlen(c1), len2 = strlen(c2);
for (int i = 0; i < len1; i++){
a[len1 - 1 - i] = c1[i] - '0';
}
for (int i = 0; i < len2; i++){
b[len2 - 1 - i] = c2[i] - '0';
}
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
c[i + j] += a[i] * b[j];
}
}
int len = len1 + len2;
for (int i = 0; i < len; i++) {
c[i + 1] += c[i] / 10;
c[i] = c[i] % 10;
}
while (c[len - 1] == 0 && len > 1) {
len--;
}
for (int i = len - 1; i >= 0; i--) printf("%d", c[i]);
return 0;
}