大整数相加核心:
void bigadd_methods(char *a, char *b, char *c) { //确保数组a长于数组b
int A = strlen(a), B = strlen(b), add, k = 0;
for (int i = 0; i<A; i++) {
if (B - i>0&&k) add = a[A - 1 - i] + b[B - 1 - i] - '0' + 1;
else if (B - i>0&&!k) add = a[A - 1 - i] + b[B - 1 - i] - '0';
else if (B - i<=0&& k) add = a[A - 1 - i] + 1;
else add = a[A - 1 - i];
if (add>'9') {
k = 1;
c[i] = add - 10;
}
else {
k = 0;
c[i] = add;
}
}
if (k) { c[A] = '1'; c[A + 1] = '\0'; }
else c[A] = '\0'; //c数组要逆序输出
}
---------------------------------------------------------------------------------------------------------
void bigsubtract_methods(char *a, char *b, char *c) { //确保数组a长于数组b
int A = strlen(a), B = strlen(b), add, k = 0;
for (int i = 0; i<A; i++) {
if (B - i>0&&k) add = a[A - 1 - i] - b[B - 1 - i] + '0' - 1;
else if (B - i>0&&!k) add = a[A - 1 - i] - b[B - 1 - i] + '0';
else if (B - i<=0&& k) add = a[A - 1 - i] - 1;
else add = a[A - 1 - i];
if (add<'0') {
k = 1;
c[i] = add + 10;
}
else {
k = 0;
c[i] = add;
}
}
c[A] = '\0'; //c数组要逆序输出
}
输出时如果是负数记得加个’-’号
输出是不单要逆序还要注意前导0的问题。输出代码如下:
int kk = 0;
for (int i = strlen(c) - 1; i >= 0; i--) {
if (kk) printf("%c", c[i]);
else if (c[i]) { printf("%c", c[i]); kk = 1; }
}
if (!kk) printf("0");