高精度
高精度
加减乘除
#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 10; // 定义最大数字长度
char s[N], t[N]; // 存储输入的两个大整数字符串
int a[N], b[N], c[N]; // 存储大整数的数组
// 函数:将两个大整数相加,结果存储在c中
void add(int a[], int b[], int c[], int lena, int lenb) {
int n = max(lena, lenb); // 获取两个数组的最大长度
for (int i = 1; i <= n; i++) {
c[i] += a[i] + b[i]; // 逐位相加
if (c[i] >= 10) { // 处理进位
c[i + 1]++;
c[i] -= 10;
}
}
// 处理最后的进位
if (c[n] >= 10) {
c[n] -= 10;
c[n + 1]++;
n++;
}
for (int i = n; i >= 1; i--) {
cout << c[i]; // 倒序输出结果
}
}
// 函数:比较两个大整数的大小
bool pd(int a[], int b[], int lena, int lenb) {
if (lena == lenb) {
for (int i = 1; i <= lena; i++) {
if (a[i] != b[i]) {
return a[i] > b[i]; // 从最高位开始比较
}
}
return true; // 两个数相等
}
return lena > lenb; // 长度不同,较长的数较大
}
// 函数:计算两个大整数的差,结果存储在c中
void jian(int a[], int b[], int c[], int lena, int lenb) {
bool op = pd(a, b, lena, lenb); // 判断哪个数较大
if (!op) {
// 如果a小于b,交换a和b
int t[N];
for (int i = 1; i <= lena; i++) {
t[i] = a[i];
}
for (int i = 1; i <= lenb; i++) {
a[i] = b[i];
}
for (int i = lenb + 1; i <= lena; i++) a[i] = 0;
for (int i = 1; i <= lena; i++) {
b[i] = t[i];
}
for (int i = lena + 1; i <= lenb; i++) b[i] = 0;
swap(lena, lenb); // 交换长度
}
int n = max(lena, lenb);
bool f = false;
for (int i = 1; i <= n; i++) {
if (f) {
c[i] = a[i] - b[i] - 1;
f = false;
} else {
c[i] = a[i] - b[i];
}
if (c[i] < 0) {
c[i] += 10;
f = true; // 处理借位
}
}
while (n > 1 && c[n] == 0) {
n--; // 去除前导零
}
if (!op) {
cout << '-'; // 如果a小于b,输出负号
}
for (int i = n; i >= 1; i--) {
cout << c[i]; // 倒序输出结果
}
}
// 函数:计算两个大整数的乘积,结果存储在c中
void cheng(int a[], int b[], int c[], int lena, int lenb) {
for (int i = 1; i <= lena; i++) {
for (int j = 1; j <= lenb; j++) {
c[i + j - 1] += a[i] * b[j]; // 逐位相乘
}
}
int n = lena + lenb;
for (int i = 1; i <= n; i++) {
c[i + 1] += c[i] / 10; // 处理进位
c[i] %= 10;
}
while (n > 1 && c[n] == 0) {
n--; // 去除前导零
}
for (int i = n; i >= 1; i--) {
cout << c[i]; // 倒序输出结果
}
}
// 函数:计算一个大整数除以一个整数的商,结果存储在c中
void chu(int a[], int b, int c[], int lena) {
int r = 0; // 存储余数
for (int i = lena; i >= 1; i--) {
r *= 10;
r += a[i];
c[i] = r / b; // 计算商
r %= b; // 计算余数
}
while (lena > 1 && c[lena] == 0) {
lena--; // 去除前导零
}
for (int i = lena; i >= 1; i--) {
printf("%d", c[i]); // 倒序输出结果
}
printf("\n%d", r); // 输出余数
}
int main() {
// 读取两个大整数
scanf("%s%s", s + 1, t + 1);
int lens = strlen(s + 1);
int lent = strlen(t + 1);
for (int i = lens; i >= 1; i--) {
a[i] = s[lens - i + 1] - '0'; // 将字符串转换为数组
}
for (int i = lent; i >= 1; i--) {
b[i] = t[lent - i + 1] - '0'; // 将字符串转换为数组
}
// 调用加法函数进行计算
add(a, b, c, lens, lent);
//除
// int x;
// scanf("%s %d",s+1,&x);
// int lens=strlen(s+1);
// for(int i=lens;i>=1;i--)
// {
// a[i]=s[lens-i+1]-'0';
// }
// chu(a,x,c,lens);
return 0;
}
这段代码包含了大整数的加法、减法、乘法和除法运算,每个函数都有详细的注释,解释了主要的逻辑和步骤。希望这能帮助你更好地理解和分享这段代码!

浙公网安备 33010602011771号