1.乘法
#include <bits/stdc++.h>
using namespace std;char s1[2000], s2[2000];
int a[2000], b[2000], c[4000];int main() {cin >> s1 >> s2;int ls1 = strlen(s1);int ls2 = strlen(s2);int ls3 = ls1 + ls2;// 将字符串 s1 和 s2 转换为数组 a 和 bfor (int i = 0; i < ls1; i++) {a[ls1 - i - 1] = s1[i] - '0';}for (int i = 0; i < ls2; i++) { // 注意这里是 ls2b[ls2 - i - 1] = s2[i] - '0';}// 计算乘法for (int i = 0; i < ls1; i++) {for (int j = 0; j < ls2; j++) {c[i + j] += a[i] * b[j];c[i + j + 1] += c[i + j] / 10; // 处理进位c[i + j] %= 10; // 取当前位的值}}// 去掉前导零while (ls3 > 0 && c[ls3 - 1] == 0) {ls3--;}// 输出结果for (int i = ls3 - 1; i >= 0; i--) {cout << c[i];}return 0;
}
2.1.除法,大除以小
//高精度除法
#include <bits/stdc++.h>using namespace std;char s[2000];
long long b,a[2000],c[2000],x,la,lc;int main()
{cin >> s >> b;la = strlen(s);for(int i = 1;i<=la;i++){a[i] = s[i-1] - '0';}for(int i = 1;i<=la;i++){c[i]=(x*10+a[i])/b;x=(x*10+a[i])%b;}lc = 1;while(c[lc]==0&&lc<=la){lc++;}for(int i = lc;i<=la;++i){cout << c[i];}return 0;
}
2.2除法,大除以大
#include <bits/stdc++.h>using namespace std;char s1[305], s2[305];
int a[305], b[305], c[305], tmp[305]; //c的长度最大为la-lb+1void init(int* x) {char s[305];cin >> s;x[0] = strlen(s);for (int i = 0; i < x[0]; i++) {x[i + 1] = s[x[0] - 1 - i] - '0'; // 正确逆序存储每一位}
}void print(int* x) {if (x[0] == 0) {cout << 0;return;}for (int i = x[0]; i >= 1; i--) {cout << x[i];}
}int compare(int a[], int b[]) {if (a[0] != b[0]) {return a[0] > b[0] ? 1 : -1;}for (int i = a[0]; i >= 1; i--) {if (a[i] != b[i]) {return a[i] > b[i] ? 1 : -1;}}return 0;
}void minu(int a[], int b[]) { // 修正函数名mine -> minufor (int i = 1; i <= a[0]; i++) {if (i <= b[0]) {a[i] -= b[i];}if (a[i] < 0) {a[i + 1]--;a[i] += 10;}}while (a[0] > 0 && a[a[0]] == 0) {a[0]--;}
}void numcpy(int p[], int q[], int n) {for (int i = p[0]; i >= 1; i--) {q[i + n] = p[i];}q[0] = p[0] + n;
}int main() {init(a);init(b);if (compare(a, b) < 0) { // 处理a < b的情况cout << 0;return 0;}c[0] = a[0] - b[0] + 1;for (int i = c[0]; i >= 1; i--) {memset(tmp, 0, sizeof(tmp));numcpy(b, tmp, i - 1); // 修正移动位数为i-1,因为商的最高位对应10^(la-lb)while (compare(a, tmp) >= 0) {c[i]++;minu(a, tmp);}}while (c[0] > 0 && c[c[0]] == 0) {c[0]--;}print(c);return 0;
}