大数取模&大数开平方

大数取模

  1. 蓝桥杯中经常会让运算结果对某一个很大的数取模作为最终结果。而往往运算结果本身就是一个十分巨大的数。这时不能把运算结果直接对这个很大的数取模。实际上运算结果在程序中是多次加法得到的,只需要在每次得到部分结果时就对其进行取模运算。再相加就得到最终结果。
    例如:
27/7=3...6		(27=17+10)
17/7=2...3
10/7=1...3
可见,3=(2+1);6=(3+3)

大数开平方

  1. 大数直接开平方很难,有定理为:
  • 假设位数为len的整数,开方取整后为一个lenSqrt位数。
  • 当len为偶数,lenSqrt = len / 2 .
  • 当len为奇数,lenSqrt = (len / 2) + 1 .
  1. 然后利用循环,从高位到地位,逐位确定其值。具体如下:
for(int pos=0;pos<len;pos++) {
			for(char c='1';c<='9';c++) {
				sarr[pos]=c;
				BigInteger pow=new BigInteger(String.valueOf(sarr)).pow(2);
				if(pow.compareTo(target)==1) {
					sarr[pos]-=1;
					break;
				}
			}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值