关于C语言大正整数相加的实现

大家好,我是一名刚接触c语言不久的大一新生,这是我的第一篇博客:关于大正整数的加法

我们都知道整型变量即使是长整型表示数字的范围也非常有限,因此我们可以用字符数组保存大正整数,然后模拟手工运算实现两个大整数的加法。
简单思路为:将两个大正整数存入字符数组,然后整体向字符数组的尾端对齐,然后从后往前进行加法运算,并将结果保存在第三个字符数组,然后将前面多余的’0’处理掉。
代码如下:

#include<stdio.h>
#include<string.h>
#define max 100
/*max为我们用到的大正整数的最大位数+1,考虑到字符串的最后一个'\0',如这里我们用的最大位数为99*/
int main()
{
    char a[max],b[max],c[max];
    int i,j,k;
    /*以读入字符串的方式输入两个我们需要进行加法运算的两个大正整数,并实现多组输入*/
    while(scanf("%s%s",a,b)!=EOF){
        /*将存储结果的字符数组初始化为'0'*/
        for(i = 0;i<max-1;i++)
            c[i] = '0';
        c[max-1] = '\0';
        /*找到字符数组a的最后一个字符,然后整体移到字符数组尾*/
        for(i = 0; a[i]; i++);
        j = i-1;
        k = max-2;
        for(;i<max-1;i++)
            a[i] = '0';
        i = j;
        for(;i>=0;i--){
            a[k] = a[i];
            k--;
            a[i] = '0';
        }a[max-1] = '\0';
        /*对字符数组b进行与上相同的操作*/
        for(i = 0;b[i];i++);
        j = i-1;
        k = max-2;
        for(;i<max-1;i++)
            b[i] = '0';
        i = j;
        for(;i>=0;i--){
            b[k] = b[i];
            k--;
            b[i] = '0';
        }b[max-1] = '\0';
        /*开始进行加法运算*/
        for(i = max-2;i>=0;i--){
        /*因为我们字符数组存的每一个元素都是字符而不是数字,因此必须注意+-'0'的细节*/
            c[i] = c[i]+a[i]+b[i]-'0'-'0';
            j = i;
            /*进位处理*/
            if((c[j]-'0')>9){
                c[j] = (c[j] - '0')%10+'0';
                c[j-1]++;
            }
        }
        /* 处理前面多余的'0':找到第一个不是'0'的元素,然后从该位置开始整体向前移并在结尾添上'\0',大正整数相加的结果就出来了*/
        for(i = 0;c[i]=='0';i++);
        j = i;
        for(k = 0;i<=max-2;i++){
            c[k++] = c[i];
            c[i] = '0';
        }c[max-1-j] = '\0';
        printf("%s\n",c);
    }
    return 0;
}

以上就是我的想法与做法,欢迎大家改进,希望能有用吧。
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值