ACM模版

所有数位相加

/*
 *  所有数位相加
 *  dig(x) := x                         if 0 <= x <= 9
 *  dig(x) := dig(sum of digits of x)   if x >= 10
 */

模拟

int dig(int x)
{
    if ( x < 10 )
    {
        return x;
    }
    int sum = 0;
    while (x)
    {
        sum += x % 10;
        x /= 10;
    }
    return dig(sum);
}

公式(结果为1~9)

// 类似于所有数位相加 MOD 9 的结果,不过结果将 0 的情况结果转移成了 9,比较鸡肋的写法,应用场景不多
int dig(int x)
{
    return (x + 8) % 9 + 1;
}

2017.5.4 添加
公式部分添加限定范围