大数加法

就像小学学的竖式加法一样,大数加法也按照这样的规律

两个大数我们可以用字符数组来保存,然后在数组中逐位进行相加,再判断该位相加后是否需要进位,为了方便计算,我们将数字的低位放在数组的前面,高位放在后面。

#include<stdio.h>
#include<string.h>
 
#define MAX 1000    // 大数的最大位数 
 
int Addition(char num1[], char num2[], int sum[]); 
int main()
{
    int i, len;
    int sum[MAX] = {0}; // 存放计算的结果,低位在前,高位在后,即sum[0]是低位 
    char num1[] = "1234567891234567891234"; // 第一个大数 
    char num2[] = "2345678912345678913345"; // 第二个大数 
    len = Addition(num1, num2, sum);    // 两数相加 
    printf("%s\n  +\n%s\n  =\n", num1, num2);
    // 反向输出求和结果
    for (i = len-1; i >= 0; i--)
        printf("%d", sum[i]);
    printf("\n"); 
    
    return 0;
}

int Addition(char num1[], char num2[], int sum[])
{
    int i, j, len;
    int n2[MAX] = {0};
    int len1 = strlen (num1); // 计算数组num1的长度,即大数的位数 
    int len2 = strlen (num2); // 计算数组num2的长度,即大数的位数 
 
    len = len1>len2 ? len1 : len2; // 获取较大的位数
    //将num1字符数组的数字字符转换为整型数字,且逆向保存在整型数组sum中,即低位在前,高位在后
    for (i = len1-1, j = 0; i >= 0; i--, j++) 
        sum[j] = num1[i] - '0';
    // 转换第二个数 
    for (i = len2-1, j = 0; i >= 0; i--, j++)
        n2[j] = num2[i] - '0';
    // 将两个大数相加 
    for (i = 0; i <= len; i++)
    {
        sum[i] += n2[i];  // 两个数从低位开始相加 
        if (sum[i] > 9)   // 判断是否有进位 
        {   // 进位 
            sum[i] -= 10;
            sum[i+1]++;
        }
    }
    if(sum[len] != 0)  // 判断最高位是否有进位 
        len++;
    return len;   // 返回和的位数 
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值