大(正)整数加法

本文介绍了一种使用字符数组存储大数并实现加法运算的方法。通过将输入字符串转换为字符数组,逐位进行加法操作,并处理进位,最终输出结果。该方法适用于超出常规数值类型范围的大数计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数字太大太大,long long放不下,因此用字符数组暂存,a[0],b[0]存放数的最低位,所以开数组来存是明智的选择。。。。。

#include <cstdio>
#include <cstring>

#define MAXN 210

int a[MAXN+10];
int b[MAXN+10];
char s1[MAXN+10];
char s2[MAXN+10];

int main()
{
    scanf("%s", s1);
    scanf("%s", s2);
    int i, j;

    //赋初值 0 ,相当于用 0 填充数组
    memset( a, 0, sizeof(a));
    memset( b, 0, sizeof(b));

    // 将字符转换为相对应的数字,存入a[]、b[]数组中,a[0]、b[0]对应于个位
    int len1 = strlen( s1);
    j = 0;
    for( i = len1 - 1; i >= 0 ; i --)
        a[j++] = s1[i] - '0';

    int len2 = strlen(s2);
    j = 0;
    for( i = len2 - 1; i >= 0 ; i--)
        b[j++] = s2[i] - '0';

    for( i = 0; i < MAXN ; i ++ ) {
        a[i] += b[i];            //逐位相加,相加最大值也就 18 ,放心加
        if( a[i] >= 10 ) {  //看是否要进位
            a[i] -= 10;
            a[i+1] ++;                 //进位
        }
    }

    int zor_num = 0 ;     //此变量用于跳过多余的0
    for( i = MAXN; i >= 0; i-- ) {
        if( zor_num )
            printf("%d", a[i]);  //如果多余的0已经都跳过,则输出
        else if( a[i] ) {
            printf("%d", a[i]);
            zor_num = 1 ; //碰到第一个非0的值,就说明多余的0已经都跳过 (去前导 0 ,方法不唯一)
        }
    }
    if(!zor_num)      //不满足上面条件,zor_num任然是 0
        printf("0");
    return 0;
}

加法完成。。。。。。。。。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值