大数取余

大数取余

一般大多数情况下,我们都能直接使用%号进行取余操作,但是当出现了一个巨大的数字,即使是long long也不能正确装下的数字我们要怎么办?这种数很明显只能使用数组来装,那我们要怎么样从数组中求出这个余数?

不仅仅是大数可以使用这种思想,这种思想是通用的,为了方便,我们这里使用小数进行示例。

现在假设我们求解433%3,下面是大致的过程

 

图中就是的算法过程其实就是我们简单的除法过程,可以看出,最后所剩下的余数其实就是我们想要的余数。

所以说这个算法的核心思想其实就是一个除法的过程,首先从高位开始一位一位的进行运算,把每一位留下的余数乘10(为什么要乘10?因为上一位的余数相当于这一位来说是一个10倍的关系,其实从上面图中也可以看出)添加到下一位去,直到最后一位进行除运算之后。

简单的描述一下计算的过程
第一位数字4:

4%3=1 
第二位数字4:要将上一位留下来的余数加到这一位上,所以有了(1X10)

(1×10+4)%3=2 
第三位数字3:依然是将上一位的余数2加到这一位上,所以有了(2X10)

(2×10+3)%3=2(2×10+3)%3=2 
最终的结果是最后一步计算得到的余数2。


下面看代码:

	/**
	 * 大数取余算法
	 */
	public static int BigNumMod(char BigNum[], int c, int length){
	    int ans = 0;
	    for(int i = 0; i < length; i++){
	    	ans = ((ans * 10) + BigNum[i]-'0') % c;
	    }	
	    return ans;
	}

总结:核心思想与我们日常算除法的过程几乎一致

 

部分引用自:https://blog.csdn.net/qq_32779119/article/details/79513480

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值