大数相加

来源:互联网 发布:js正则表达式函数 编辑:程序博客网 时间:2024/06/06 03:08

大数相加(A+B)

这是一道很简单基础的面试题,大数相加转换成字符串处理即可

  • 获取A,B的长度

  • 字符串反序

  • 进位处理


字符串反向

char *reverse_str(char *a) {    if(a == NULL)        return NULL;    int len = strlen(a);    char *left = a;    char *right = a + len - 1;    while(left < right) {        *left  ^= *right;        *right ^= *left;        *left  ^= *right;        if(left == (right - 1)) {            break;        }        left++;        right--;    }    return a;}

相加处理

char* add(char *a, char *b) {    int len = strlen(a);    int len_b = strlen(b);    char ans[100];    memset(ans, 0, sizeof(ans));    len > len_b ? len : len_b;    reverse_str(a);    reverse_str(b);    int i = 0, ret = 0, flag = 0;    int tmp;    while(i < len && flag == 0) {        if(a[i] < '0' || a[i] > '9') {            flag = 1;            break;        } else if(b[i] < '0' || b[i] > '9') {            flag = 2;            break;        }        tmp = (a[i] - '0') + (b[i] - '0') + ret;        ans[i] += (tmp % 10) + '0';        ret = tmp / 10;        i++;    }    if(flag == 1) {        for(i; i < len; i++) {            tmp = (b[i] - '0') + ret;            ans[i] += (tmp % 10) + '0';            ret = tmp / 10;        }    } else if(flag == 2) {        for(i; i < len; i++) {            tmp = (a[i] - '0') + ret;            ans[i] += (tmp % 10) + '0';            ret = tmp / 10;        }    }    if(ret != 0)        ans[i] = ret + '0';    reverse_str(ans);    cout << ans;}

主函数

int main() {    char a[100];    char b[100];    cin >> a;    cin >> b;    add(a, b);    return 0;}
原创粉丝点击