• 解题:卡布列克数

    2016/12/01 Vinny Hu 5 评论

有一种数被称为卡布列克数,其形式如:45 * 45 = 2025 并且 20+25=45,这样 45 就是一个卡布列克数。

它标准定义如下:

若正整数X在N进制下的平方可以分割为二个数字,而这二个数字相加后恰等于X,那么X就是N进制下的卡布列克数。

分解后的数字必须是正整数才可以,例如:10*10=100 并且 10+0=10,因为0不是正整数,所以10不是卡布列克数。

现在题目的要求是给定你一个范围[a,b](b大于等于a,a大于等于0),你需要把这个范围内的卡布列克数全部输出。

样例如下:

输入:

输出:

【解题提示】:

  • 请在评论中先给出你的实现思路;
  • 然后贴出实现的代码;
  • 编程语言不限;
  • 评论支持代码高亮,请点击评论框菜单栏上的  < > 按钮;
1 收藏


直接登录
最新评论
  • openqt Python开发 2016/12/01

    直接了当的工程实现,

     

     

  • 卡布列克数 的定义错了吧。应该是

    若正整数X在N进制下的平方可以分割为二个“位数相同的”数字(“如果位数为奇数,则首位补0”),而这二个数字相加后恰等于X,那么X就是N进制下的卡布列克数。

    • Vinny Hu   2016/12/01

      您好,其实这个定义在网上也是有点争议的,不过不管按照您这个的定义还是上面题目中的,如果代码按照从末尾一次的除10取余计算,算出的答案是一样的。

  • Dr. ROY   2016/12/01

    懒的写代码,只写个思路,或者叫建议。

    循环计算数字符不符合条件比较简单,但是有个优化的小建议

    从a遍历到b的方法是错误的。因为如图给出的示例,2-100之间只有4个结果,如果遍历的话,94次是多余的。

    那么如何尽可能多的排除掉不必要的判断呢?

    注意:如果这个数是卡数,其平方结果必须是偶数位的。因此,2位数只有从10到99,对应平凡根为3.2和9.9,只有4-9需要判断;同理,4位数1000-9999,对应32-99需要判断……

  • 可健康了 程序员 2016/12/12