一、高精度加法:
#include <bits/stdc++.h>
using namespace std;
#define LEN 1005
int a[LEN], b[LEN], c[LEN];
void clear(int a[]){
memset(a, 0, sizeof(a));
}
void read(int a[]){
clear(a);
static char s[LEN + 1];
cin >> s;
int len = strlen(s);
for (int i = 0; i < len; ++i){
a[len - 1 - i] = s[i] - '0';
}
}
void print(int a[]){
int i = 0;
for (i = LEN - 1; i >= 1; --i){
if (a[i] != 0){
break;
}
}
while(i >= 0){
putchar(a[i] + '0');
--i;
}
}
void add(int a[], int b[], int c[]){
clear(c);
for (int i = 0; i < LEN; i++){
c[i] += a[i] + b[i];
if (c[i] >= 10) {
c[i + 1] += 1;
c[i] -= 10;
}
}
}
int main()
{
read(a);
read(b);
add(a, b, c);
print(c);
return 0;
}
二、高精度减法:
#include <bits/stdc++.h>
using namespace std;
const int LEN = 10086;
int a[LEN], b[LEN], c[LEN], len_a = 0, len_b = 0;
void clear(int a[]) {
for (int i = 0; i < LEN; ++i) a[i] = 0;
}
void read(int a[]) {
static char s[LEN + 1];
scanf("%s", s);
clear(a);
int len = strlen(s);
for (int i = 0; i < len; ++i) a[len - i - 1] = s[i] - '0';
}
void print(int a[]) {
int i;
for (i = LEN - 1; i >= 1; --i)
if (a[i] != 0) break;
for (; i >= 0; --i) putchar(a[i] + '0');
putchar('\n');
}
void sub(int a[], int b[], int c[]) {
clear(c);
for (int i = 0; i < LEN - 1; ++i) {
c[i] += a[i] - b[i];
if (c[i] < 0) {
c[i + 1] -= 1;
c[i] += 10;
}
}
}
string into_string(int x[]){
string temp;
int i;
for (i = LEN - 1; i >= 1; --i){
if (x[i] != 0) break;
}
for (; i >= 0; --i){
temp += x[i] + '0';
}
return temp;
}
int main() {
read(a);
read(b);
string a1 = into_string(a);
string b1 = into_string(b);
if ((a1 < b1 && a1.size() == b1.size()) || a1.size() < b1.size()){
cout << '-';
sub(b, a, c);
print(c);
}
else {
sub(a, b, c);
print(c);
}
return 0;
}
三、高精度乘法
#include <bits/stdc++.h>
using namespace std;
const int LEN = 10086;
int a[LEN], b[LEN], c[LEN], len_a = 0, len_b = 0;
void clear(int a[]) {
for (int i = 0; i < LEN; ++i) a[i] = 0;
}
void read(int a[]) {
static char s[LEN + 1];
scanf("%s", s);
clear(a);
int len = strlen(s);
for (int i = 0; i < len; ++i) a[len - i - 1] = s[i] - '0';
}
void print(int a[]) {
int i;
for (i = LEN - 1; i >= 1; --i)
if (a[i] != 0) break;
for (; i >= 0; --i) putchar(a[i] + '0');
putchar('\n');
}
void mul(int a[], int b[], int c[]) {
clear(c);
for (int i = 0; i < LEN; ++i) {
for (int j = 0; j <= i; j++) c[i] += a[j] * b[i - j];
if (c[i] >= 10) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
}
int main()
{
read(a);
read(b);
mul(a, b, c);
print(c);
return 0;
}