给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。
第一种原理很简单,就是不断计算每个的合,然后判断是否>10;
>10,就转换一下num=sum和sum=0,继续循环;
int addDigits(int num) {
int sum = 0;
while (num)
{
sum += num % 10;
num /= 10;
if (sum < 10 && num == 0)
{
break;
}
if (sum > 10 && num == 0)
{
num = sum;
sum = 0;
}
}
return sum;
}
第二种得动动脑子了,你需要先了解如何证明一个数的数根(digital root)就是它对9的余数.
这张图片从知乎上找到,我觉得写得很好:如何证明一个数的数根(digital root)就是它对9的余数? - 知乎https://www.zhihu.com/question/30972581
然后就有了我们这个简洁的公式
int addDigits(int num){
return (num - 1) % 9 + 1;
}
总之,只要算法在手,学什么语言也不怕.