现在的位置: 首页 > 综合 > 正文

表示 十六进制字符串 对 10取模的方法

2014年01月03日 ⁄ 综合 ⁄ 共 485字 ⁄ 字号 评论关闭

缘由:近与同学讨论遇到一个问题,有如"0xe89323948439f9d3a85953589"的一串字符表示的十六进制数.  需要求出 模 10 后取的余数??

 

解决方法:
如果用一个int 型数据保存. 逐步解释每一个字符乘以16^n的值再累加, 把字符串转化成数字 再 mod 10的话,会存在溢出的问题, 所以这种思路不太好.

自己能想到最好的办法是这样的:读出每一个字符对应的于0~15的值(除最后一位)累加乘以6,再加上最后一位的值. 之后再 mod10 即是最终所求的余数..
原理:16^n = 10*k +6 (n,k为正整数,且n>=1) 这个式中显然成立.. 因此 (16^n)mod(10) = (10*k + 6)mod(10) = 6(n,k为正整数,且n>=1).
      因此除最后一位的数.都可以直接简化为乘以6,再加了最后一位的值. 最后mod 10即可.

示例: 比如 0x58fd7 mod 10 = ?
       直接口算易知:(5 + 8 + 15 + 13)* 6 + 7 的结果mod10 为 3 。。 有此方法上面的式中很长都可以很快口算出来.何况用编程for循环即可..

 

 

或许还有更好的方法. 但自己想不出.也没再深入的想..

抱歉!评论已关闭.