分享

算法问题中的奇技淫巧

 仁者rz 2016-07-15
1、数字和问题(Update:2016-7-14)

大家在最初开始学习编程的时候一定都做过这样一道题:

步骤I给定一个自然数n,

步骤II将n中每一位数字相加,得到一个新的自然数m

步骤III赋值:n=m

步骤IV判断:如果n只有一位数字(即0≤n<10)则输出数字n,否则返回到步骤II。

没错这是道简单的题目,大部分同学的思路也跟上面给出的四步差不多。嗯,我也一直是这么做的,直到在CodeWars上面看到了这样一段代码……

1 public class DRoot {2 public static int digital_root(int n) {3 return (n != 0 && n%9 == 0) ? 9 : n % 9;4 }5 }

嗯,没错,不需要用递归反复加,只要求一个模一步就出来了。至于为什么可以这么做,以本人微弱的数学功底只能从找规律的角度理解一下了:如下表所示,求和结果实际上是从1到9反复循环,因此只要用n模9并对结果为0的情况单独处理一下就可以了……如果大家有更好的想法欢迎在评论里给出。

nResultn%9
111
222
990
1011
1122
1233
1890

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多