Online Compiler C

#include <stdio.h> int digit_sum(unsigned int n) { int temp=0; if(n==0) { return n; } if(n<10) { return n; } while(n>=10) { temp=temp+n%10; n=n/10; } return temp; }
这段代码定义了一个函数 `digit_sum`,用于计算一个无符号整数的各位数字之和。但代码中存在逻辑问题,导致结果不正确。

- 当 `n` 小于10时,函数直接返回 `n`,这没问题。
- 但 `while` 循环只处理到 `n` 变成一位数为止,循环结束后返回的 `temp` 只累加了除最高位以外的数字,最高位没有被加进去。例如输入123,循环会累加3和2,然后n变成1,循环结束,返回5,但正确结果应该是6。
- 另外,`if(n==0)` 分支返回 `n` 是多余的,因为 `n<10` 分支已经覆盖了0的情况。

提示:
- 检查循环结束后,`n` 中剩下的最后一位数字是否被加入了 `temp`。
- 思考如何调整循环条件或循环后的处理,确保所有位都被累加。