超长整数加法,输出和19-3



#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *ladd(char *s1, char *s2){
    int n1, n2, n, i;
    char *result, c = 0;
    n1 = strlen(s1);	//数字串s1的长度
    n2 = strlen(s2);	//数字串s2的长度
    n = n1 > n2?n1:n2;	//数字串s1,s2最大长度
    result = (char*)malloc(n + 2);	//申请存结果串的内存
    for(i = n + 1; i >= 0; i--)	//将s1从低位开始搬到result,没有数字的位以及最高位填'0'
        result[i] = i > n - n1?s1[i-n+n1-1]:'0';
    for( i = n; i >= 0; i--)
    {
        char tchar;
        tchar = i > n- n2?result[i]-'0'+s2[i - n + n2 - 1] - '0' +c:result[i] - '0' + c;	//将数字字符变为数
        c = tchar > 9?1:0;	//设进位
        result[i] = tchar % 10 + '0';

    }
    return result;
}
int main(){

    char num1[100], num2[100], *num;
    scanf("%s %s", num1, num2);
    num = ladd(num1, num2);
    printf("%s+%s=%s\n", num1, num2, num);
    free(num);
    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值