超长整数运算--4则运算函数(参考)

问题引入

        日常所使用编程中语言中拥有不同的数据类型,如整数short、int、long等其他数据类型,但是这些数据类型都是有一定精度和数值长度限制的,因此对于很大的“变长数字”可表示的范围就受到了限制。例如:123456789123456789这样的整数就不可能储存在long整数中,在这里我们暂且将其称为“超长整数”运算,或俗称大数运算。

问题分析

        通过问题引入我们知道,超长整数已经超出编程语言的数据表示范围,那么又该如何用多个“变数”(不同的数)对超长整数进行表示和运算呢?

        一个变数无法表示超长整数,则就使用多个变数,当然这使用阵列最为方便,假设程式语言的最大资料型态可以储存至65535的数,为了计算方便及符合使用十进位制的习惯,让 每一个阵列元素可以储存四个位数,也就是0到9999的数,例如:

        由于使用阵列来储存数值,关于数值在运算时的加减乘除等各种运算、位数的进位或借位就必须自行定义,加、减、乘都是由低位数开始运算,而除法则是由高位数开始运算,如下所示+、-、x、/四则运算函数形式参考。

        注意:以下函数只为提供参考,部分参考书籍。

//  N  指  阵列长度


void add(int *a, int *b, int *c) { 
    int i, carry = 0;
    for(i = N - 1; i >= 0; i--) {
        c[i] = a[i] + b[i] + carry; 
        if(c[i] < 10000)  carry = 0; 
        else { // 进位
            c[i] = c[i] - 10000;
            carry = 1;
        }

    }

}

void sub(int *a, int *b, int *c) { 
    int i, borrow = 0;
    for(i = N - 1; i >= 0; i--) {
        c[i] = a[i] - b[i] - borrow; 
        if(c[i] >= 0)  borrow = 0; 
        else { // 借位
            c[i] = c[i] + 10000;
            borrow = 1;
        }
    }

}

void mul(int *a, int b, int *c) { // b 为乘数
    int i, tmp, carry = 0;
    for(i = N - 1; i >=0; i--) { 
        tmp = a[i] * b + carry; 
        c[i] = tmp % 10000; 
        carry = tmp / 10000;
    }
}

void div(int *a, int b, int *c) { // b 为除数
    int i, tmp, remain = 0; 
    for(i = 0; i < N; i++) {
        tmp = a[i] + remain; 
        c[i] = tmp / b;
        remain = (tmp % b) * 10000;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等日出看彩虹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值