小程序 - c字符串表示大整数

#define max(a, b) ((a) > (b) ? (a) : (b))

static char* reverse(char *str)
{
    char *l, *r, c;
    for (l = str, r = str + strlen(str) - 1; l < r; l++, r--) {
        c = *l;
        *l = *r;
        *r = c;
    }
    return str;
}

/*
 * Return the result of a big int as string when succeeded; otherwise
 * a NULL is returned. The caller needs to take care of the returned
 * heap memory; caller needs to ensure the inputs are valid big int.
 */
char* addBigInt(char *i1, char *i2) 
{
    char *p1, *p2, *p3, *res;
    int len1, len2, val, carry;
    
    if (!i1 || !*i1)
        return strdup(i2);
    if (!i2 || !*i2)
        return strdup(i1);
    
    len1 = strlen(i1);
    len2 = strlen(i2);
    if ((res = (char*)malloc(max(len1, len2) + 2)) == NULL)
        return NULL;
    for (p1 = i1 + len1 - 1, p2 = i2 + len2 - 1, p3 = res, val = 0; 
        p1 != i1 - 1 || p2 != i2 - 1 || val; 
     *p3++ = val % 10 + '0', val /= 10) { if (p1 != i1 - 1) val += *(p1--) - '0'; if (p2 != i2 - 1) val += *(p2--) - '0'; } *p3 = '\0'; return reverse(res); }

 

转载于:https://www.cnblogs.com/brayden/p/5344427.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值