例如,给出整数1236,那么计算
1+2+3+6=12
因为12是一个两位数,所以继续求和
1+2=3
得到结果为:3。
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;
}
你这个代码只计算了两次。肯定是不行的。
写一个函数用来计算某个数各个位数的和,然后循环调用这个函数就可以了。
#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;
}