汇总一个数字的所有数字,直到它变成一个数字

时间:2014-04-05 19:00:37

标签: c++ loops math operators

这不是学校作业或我的作业。事实上,我提出了这个问题。我一直在研究和测试仅single while loop使用基本运算符(如+-*/%)和基本变量(如int value)来执行任务的可能性。我想知道在不使用任何其他控制结构的情况下可以实现多少。

这是我的编程问题:

使用单个while循环来汇总正数的所有数字,直到它变为单个数字。 例如:

778899 becomes 7+7+8+8+9+9=48. 
48 becomes 4+8=12. 
12 becomes 1+2=3. 
Final number is 3.

如果我们被允许使用条件语句,这个问题非常容易。但是,如果我们不能使用,我们仍然可以解决它:

-any conditional statements (if/switch case)
-any ternary operators
-any function calls
-any recursive calls
-any other data structures like arrays/lists/vectors/pointers..
-any bit shift operators

注意:我不是在讨论它是否可以解决。我知道可以做到。

1 个答案:

答案 0 :(得分:7)

实际上非常简单:

int singleDigitSum(int n) {
  int sum = n % 9;
  while (sum == 0) {
    sum += 9;
  }
  return sum;
}

说明:对于给定的数字N,该单个数字和实际上是N的余数除以9,或者,如果该余数为0,9本身。所以这里的循环仅用于在最后一种情况下将结果“快进”到9。