• leetcode 258. Add Digits(数论)


    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

    For example:

    Given num = 38, the process is like: 3 + 8 = 111 + 1 = 2. Since 2 has only one digit, return it.

    这道题是求一个数的数根。

    数根有一个同余性质:一个数与它的数根对(b-1)同余(b是进制数)。

    举个简单的例子就明白了:

    123=1*100+2*10+3

    =1*(99+1)+2*(9+1)+3

    =(99+2*9)+(1+2+3)

    前面一项能被9整除,后面的一项就是各个位上数的和。对1+2+3后得到的数,还是可以这么拆分,一直下去直到数根。

    所以一个数与它的数根对(b-1)同余(b是进制数)。

    对于本题,我们就利用这个性质求数根,因为数根是一位数,而且数根%9和num%9结果一样的,所以我们就直接num%9,但是我们这里求出来的数不是数根,数根是[0,9],而%9求出的是[1,8],所以我们加一个小的处理技巧:先减1,模了以后再加1.

    class Solution {
    public:
        int addDigits(int num) {
            return 1+(num-1)%9;   
        }
    };
  • 相关阅读:
    ifdef有大用处
    osgEarth编译
    CyanogenMod 7.1 for Sony Ericsson X8 下载 CM7.1 for 索爱X8下载
    ArcGIS影像配准与空间配准
    ArcGIS Server的切图原理深入
    Arcgis server的rest服务url写法解读
    地图切片公式
    新随笔
    solr的java调用
    配置文件
  • 原文地址:https://www.cnblogs.com/zywscq/p/5433550.html
Copyright © 2020-2023  润新知