大数相加

输入:

    第1行.:测试数据的组数

    第2行:两个整数


#include <stdio.h>

#include <string.h>

int reserve(char *num, int len)  //颠倒数组中的元素
{
    int i = 0, low = 0, high = len-1;
    char c;
    while(low < high)
    {
        c = num[low];
        num[low] = num[high];
        num[high] = c;
        low ++;
        high --;
    }
    return 0;
}
int main()
{
    int n, len_1, len_2, i = 0, j = 0;
    char num_1[1000], num_2[1000], result[1000];
    scanf("%d", &n);
    for(j = 1; j <= n; j++)
    {
        for(i = 0; i < 1000; i ++)
        {
            result[i] = '0';
        }
        scanf("%s%s", num_1, num_2);
        len_1 = strlen(num_1);
        len_2 = strlen(num_2);
        printf("Case %d:\n", j);
        printf("%s + %s = ", num_1, num_2);
        reserve(num_1, len_1);
        reserve(num_2, len_2);
        if(len_1 < len_2)   //数组num_1比数组num_2短
        {
            for(i = len_1; i < len_2; i++)    //使两个数组等长,短的数组后面添0
                num_1[i] = '0';
            for(i = 0; i < len_2; i ++)
            {
                result[i] += (num_1[i] + num_2[i] - 96);
                if(result[i] > 57)
                {
                    result[i] = ((result[i] - 48) % 10) + 48;
                    result[i+1] ++;
                }
            }
            if(result[len_2] != '0')     //如果数组的最高位发生进位
                printf("%c", result[len_2]);
             for(i = len_2 - 1; i >= 0; i --)
                printf("%c", result[i]);
        }
        else
        {
            for(i = len_2; i < len_1; i++)
                num_2[i] = '0';
            for(i = 0; i < len_1; i ++)
            {
                result[i] += (num_1[i] + num_2[i] - 96);
                if(result[i] > 57)
                {
                    result[i] = ((result[i] - 48) % 10) + 48;
                    result[i+1] ++;
                }
            }
            if(result[len_1] != '0')  
                printf("%c", result[len_1]);
             for(i = len_1 - 1; i >= 0; i --)
                printf("%c", result[i]);
        }
        printf("\n");
        if(j != n)
            printf("\n");
    }
    return 0;

}


如果大家有更好的方法请告诉我,谢谢。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值