编写求各位数和的问题

问题遇到的现象和发生背景 给定一个正整数,求它的各位数字之和,直到这个和只有一位数为止。

例如,给出整数1236,那么计算

1+2+3+6=12

因为12是一个两位数,所以继续求和

1+2=3

得到结果为:3。

用代码块功能插入代码,请勿粘贴截图 #include

int digit_sum(int n) {
int b,c=0,d=0,e=0;

while (n!=0)
{ b=n%10;
c+=b;
n/=10;
}if(c%10==0)  return c;
else  while (c!=0)
{ d=c%10;
e+=d;
c/=10;
}  return e;

}int main()
{
int n;
scanf("%d", &n);
printf("%d", digit_sum(n));
return 0;
}

运行结果及报错内容 老是对67%,不知道哪里不全面。

你这个代码只计算了两次。肯定是不行的。
写一个函数用来计算某个数各个位数的和,然后循环调用这个函数就可以了。

#include <stdio.h>

int sum_(int n);

int main() {
    int i;
    scanf("%d", &i);
    while (i >= 10) {
        i = sum_(i);
    }
    printf("i = %d", i);
    return 0;
}

int sum_(int n) {
    int sum = 0;
    while (n) {
        sum = sum + n % 10;
        n = n / 10;
    }
    return sum;
}



#include <stdio.h>
int digit_sum(int n) {
  int res=0;
  while (n != 0)
  {
    res += n % 10;
    n /= 10;
  }
  return res;
}
int main()
{
  int n;
  scanf("%d", &n);
  printf("%d", digit_sum(n));
  return 0;
}

第5行:if(c%10==0) 这里的条件不对,如果 c = 10, 10 % 10 == 0 ,返回是两位数了,所以这里应修改为:if(c<10)。修改如下,供参考:

#include <stdio.h>
int digit_sum(int n) {
    int b, c = 0, d = 0, e = 0;
    while (n != 0)
    {
        b = n % 10;
        c += b;
        n /= 10;
    }
    if (c < 10)  return c; //(c % 10 == 0)
    digit_sum(c);
    //else  while (c != 0)
    //{
    //    d = c % 10;
    //    e += d;
    //    c /= 10;
    //}  return e;
}int main()
{
    int n;
    scanf("%d", &n);
    printf("%d", digit_sum(n));
    return 0;
}