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 = 11
, 1 + 1 = 2
. Since 2
has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
分析:如果是用循环、递归做的话很容易,但题目要求不能用,且时间复杂度为O(1),那说明就要找规律套公式什么的,我做的时候是在ACM
的模版里面发现并记得过这么一条公式:(num+8)%9+1,但不明白是怎么来的,网上搜了一下才懂,请看人家的分析(给出网址):
点击打开链接 公式分析
点击打开链接 打表找规律分析
#include<cstdio>
using namespace std;
/***********************************提交部分****************************/
class Solution
{
public:
int addDigits(int num)
{
if(num==0)
return 0;
else
return (num+8)%9+1; //等价于(num-1)%9+1
}
};
/***********************************************************************/
int main()
{
int n;
Solution s;
while(~scanf("%d",&n))
{
int ans=s.addDigits(n);
printf("%d\n",ans);
}
return 0;
}