1位数除0之外不能被11整除, 2位数的话 除了 11, 22, 33 .. 99 之外不能被11整除. 3位数的话 121, 132 .. 可以把个位数和百位数相加 然后减去十位数 如果为0就能被整除, 比如 176 能被11整除因为 1+6-7=0. 4位数以上就比较麻烦了, 不过有更为简便的方法.
假设 整数为
比如 3619 这个整数 我们可以拆成 +3 -6 +1 -9 这4个数字, 相邻的符号取反并求和, 为 -11 能被11整除 所以 3619 也能被11整数 商为329. 最左边数字的符号可取正也可取负, 如果取负的话, -3+6-1+9=11 判断也是成立的. 这个简单的数学小技巧是怎么来的呢?
因为: 1, 100, 10000, 100000, ..
假设 n 是奇数 那么 除11取余数为:
若是 偶数 那么 除11取余数为:
两种情况都是把 每位数字符号取反相加求和, 然后再判断这个值是否能被 11整除就可以了.
这个算法在判断高精度整数就能用上了, 所谓的高精度整数就是很大很大的整数(位数远超过了计算机4个字节或者8个字节所能表示的值)
献上 VBScript 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | Function DivBy11(num) s = 0 sign = 1 For i = 1 To Len(num) s = s + (Asc(Mid(num, i, 1)) - 48) * sign sign = -sign Next DivBy11 = (s Mod 11) = 0 End Function If DivBy11("3619") Then Msgbox "可以被整除" End If |
Function DivBy11(num) s = 0 sign = 1 For i = 1 To Len(num) s = s + (Asc(Mid(num, i, 1)) - 48) * sign sign = -sign Next DivBy11 = (s Mod 11) = 0 End Function If DivBy11("3619") Then Msgbox "可以被整除" End If
参考英文: C++ Coding Exercise: How to Check if a Large Integer is divisible by 11?
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK