在线编译器 C

#include <stdio.h> int main() { int n; // 读取输入的自然数 if (scanf("%d", &n) != 1) { return 0; } int sum = 0; // 循环拆分数字的每一位 while (n > 0) { sum += n % 10; // 取出当前最低位(个位)的数字,累加到 sum 中 n /= 10; // 去掉已经累加的最低位 } // 判断数位之和是否等于 10 if (sum == 10) { printf("YES\n"); } else { printf("NO\n"); } return 0; }
这段代码的功能是:读取一个自然数,计算它的各位数字之和,然后判断这个和是否等于10,并输出YES或NO。

代码逻辑是正确的,但有一个潜在问题:当输入的数字是0时,while循环不会执行,sum保持为0,程序会输出NO。但题目要求的是自然数,通常自然数包括0,而0的各位数字之和是0,不等于10,所以输出NO是合理的。不过,如果题目要求处理0的情况,可能需要考虑。

- 检查一下,如果输入的数字是负数,程序会如何处理?虽然题目说自然数,但scanf读取后没有对负数做特殊处理,while循环不会执行,输出NO。这可能是合理的,但需要确认题目是否允许负数输入。
- 另外,考虑一下输入非常大的数字时,int类型可能溢出。虽然题目没有明确说明范围,但可以思考一下是否需要使用更大的整数类型。