1位数除0之外不能被11整除, 2位数的话 除了 11, 22, 33 .. 99 之外不能被11整除. 3位数的话 121, 132 .. 可以把个位数和百位数相加 然后减去十位数 如果为0就能被整除, 比如 176 能被11整除因为 1+6-7=0. 4位数以上就比较麻烦了, 不过有更为简便的方法.
假设 整数为 那么只要 那么这个整数就能被11整除.
比如 3619 这个整数 我们可以拆成 +3 -6 +1 -9 这4个数字, 相邻的符号取反并求和, 为 -11 能被11整除 所以 3619 也能被11整数 商为329. 最左边数字的符号可取正也可取负, 如果取负的话, -3+6-1+9=11 判断也是成立的. 这个简单的数学小技巧是怎么来的呢?
因为: 1, 100, 10000, 100000, .. 除于11的余数为1 而 10, 1000, 100000… 除于11余数为 -1 所以任何整数都可以写成:
假设 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?
GD Star Rating
loading...
本文一共 341 个汉字, 你数一下对不对.loading...
上一篇: 免费好用的二维码图片API
下一篇: 2016法国欧洲杯 四分之一决赛即将打响!
扫描二维码,分享本文到微信朋友圈