计算两个任何长度的整数之和(自定义函数通过数组装超大整数)

背景

我们知道C语言int所能表示的数字范围是-231 ~ 231-1,所能表示的最大整数为2147483647,那么long long所能表示的数字范围是-263 ~ 263-1,所能表示的最大整数为9223372036854775807,那么如果我们想计算更大的数据呢,那C的基本数据类型就做不到了,所以这里我们需要数组

实现代码

#include<stdio.h>
#define MAXLEN 100
typedef int sqlist[MAXLEN];

int input(sqlist A) {
    int i;
    for(i = 0; i < MAXLEN; i++) {
        A[i] = 0;
    }
    printf("输入一个正整数的各位(输入-1结束读取)\n");
    i = 0;
    int x;
    while(1) {
        scanf("%d", &x);
        if(x < 0) {
            break;
        }
        A[i++] = x;
    }
    return i;
}

void output(sqlist A, int low, int high) {
    int i;
    for(i = low; i < high; i++) {
        printf("%d", A[i]);
    }
    printf("\n");
}

void move(sqlist A, int na) {
    int i;
    for(i = 0; i < na; i++) {
        A[MAXLEN - i - 1] = A[na - i - 1];
    }
}

int add(sqlist A, int na, sqlist B, int nb) {
    int nc, i, j, length = 0;
    if(na > nb) {
        nc = na;
    }
    else {
        nc = nb;
    }
    move(A,na);
	move(B,nb);
	for(i=MAXLEN-1;i>=MAXLEN-nc;i--)
	{
		j=(A)[i]+B[i];
		if(j>9)/*和大于9*/
		{
			(A)[i-1]=(A)[i-1]+1; /*高位加上1*/
			(A)[i]=j-10; /*和减去10后存储到当前位*/
		}
		else
			(A)[i]=j;
		if(i==MAXLEN-nc)/*处理最高位*/
		{
			if(j>9)
			{
				(A)[i-1]=1;
				length=nc+1;
			}
			else
				length=nc;
		}
	}
	return length;
}

void main() {
    sqlist A, B;
    int na, nb, nc;
    na = input(A);
    nb = input(B);
    printf("整数A:");
    output(A, 0, na);
    printf("整数B:");
    output(B, 0, nb);
    nc=add(A,na,B,nb);
	printf("相加后的结果:");
	output(A,MAXLEN-nc,MAXLEN);
}

样例运算结果如下:
在这里插入图片描述

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值