在C中递归:“返回-Z%9 +1”是怎么回事?

时间:2018-12-31 14:00:11

标签: c math integer-arithmetic

我正在做一个挑战,要从一个int求和并仅在小于10时返回它。

例如:

12 should return 1 + 2 = 3.
123 should return 1 + 2 + 3 = 6.
but 99 should return 9, cause 9 + 9 = 18 and 1 + 8 = 9.

因此结果必须始终小于10。

完成某人后看到其他人的解决方案:

int digital_root(int Z) {
  return --Z % 9 + 1;
}

任何人都可以解释这里发生了什么吗?

我想出了这个解决方案:

int digital_root(int n) {
  int time = n;
  int i = 0;
  int base = time;
  while(base > 0)
  {
    i++;
    base = base / 10;
  }

  int num = 0;
  for(int j = 0; j < i; j++)
  {

    num = num + (time % 10);
    time = time / 10;
  }
  if(num > 9) {
    num = digital_root(num);
  }

  return num; 
}

将我的代码与其他人进行比较,每个人所做的事情都与我所做的相似。可悲的是,张贴此消息的那个家伙没有解释它。

0 个答案:

没有答案