代码如下
#include <stdio.h>
#include <string.h>
#include <math.h>
void printf_arr(int* arr) { // 输出数组的值
for (int i = arr[0]; i > 0; i--) {
printf("%d", arr[i]);
}
printf("\n");
return;
}
int big_add(int* a, int* b, int* ans_ab) {
ans_ab[0] = a[0] > b[0] ? a[0] : b[0]; // 和的长度
int min = a[0] <b[0] ? a[0] : b[0];
for (int i = 1; i <= ans_ab[0]; i++) {
if(i<=min) ans_ab[i] = a[i] + b[i]; // 加法运算
if (i > min && a[0] == min) ans_ab[i] = b[i];
if (i > min && b[0] == min) ans_ab[i] = a[i];
}
for (int i = 1; i <= ans_ab[0]; i++) { // 处理进位
if (ans_ab[i] > 9)
{
ans_ab[i + 1] += ans_ab[i] / 10;//进几个十
ans_ab[i] %= 10;//剩下的个位数字
if (i == ans_ab[0]) ans_ab[0]++; // 最高位大于9,长度+1
}
}
return 1;
}
void jiafa(int n1[], int n2[])
{
int ans[1005] = { 0 };
//2、 算法计算-------------------
big_add(n1, n2, ans);
printf_arr(ans);
}
// 交换两个数组
void swap_arr(int* n1, int* n2) {
int max_len = n1[0] > n2[0] ? n1[0] : n2[0];
int temp;
for (int i = 0; i <= max_len; i++) {
temp = n2[i];
n2[i] = n1[i];
n1[i] = temp;
}
return;
}
// 计算大整数减法 n1 - n2
int jianfa(int n1[], int n2[]) {
int ans[1005] = { 0 };
int flag = 1; // 如果 n1 > n2 即 flag = 1
if (n1[0] < n2[0]) flag = 0;
if (n1[0] == n2[0]) {//位数相同的话
int i = n1[0],k=n1[0];
while (i > 0) {
if (n1[i] == n2[i]) i--,k--;
if (n1[i] > n2[i]) i = 0; // 要考虑每位都大的情况
if (n1[i] < n2[i]) {
flag = 0;
break;
}
}
if (i == 0&&k==0) {
printf("%d\n", 0); // 位数相等,每一位也相等,差值为0
return 0;
}
}
if (flag == 0) swap_arr(n1, n2); // n1 < n2 交换相减
for (int i = 1; i <= n1[0]; i++) {
if (n1[i] < n2[i]) {
n1[i] += 10;
n1[i + 1] -= 1;
}
if (n1[i] >= 0 && n2[i] >= 0) ans[i] = n1[i] - n2[i];
if (n1[i] >= 0 && n2[i] == -3) ans[i] = n1[i] - 0;
}
if (flag == 0) printf("-");
int flag_0 = 0; // 判断当前的0是否要输出,如果之前输出过正整数,则当前的0需要输出
for (int i = n1[0]; i > 0; i--) {
if (ans[i]) printf("%d", ans[i]), flag_0 = 1;
if (ans[i] == 0 && flag_0 == 1) printf("%d", 0);
}
思路借鉴于
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《大整数(1000位)的加减乘除运算》, 一起来围观吧 https://blog.csdn.net/wu496963386/article/details/121793548?utm_source=app&app_version=5.2.1&code=app_1562916241&uLinkId=usr1mkqgl919blen