Онлайн компилятор C

#include <stdio.h> int main() { int a, b, i = 1,cymma=0; scanf ("%d" ,&a); b=a; while ( a != 0){ a= a/10; i=10*i; } while(b !=0 ) { b=b/i; i=i/10; cymma=cymma+b; } printf("%d", cymma); return 0; }
这段代码试图计算一个整数的各位数字之和,但实现方式有误。它先通过循环计算数字的位数(用变量i表示10的幂次),然后试图从高位到低位提取数字并累加。

代码的主要问题在于第二个循环中的逻辑。变量b在每次循环中被除以i,但i的值也在变化,导致提取的数字不正确。此外,变量b的值被反复修改,最终累加的结果并不是各位数字之和。

- 提示1:检查第二个循环中b = b / i这一步。当i是10的幂时,b / i得到的是最高位数字吗?考虑一下整数除法的行为,以及b的值在循环中如何变化。
- 提示2:思考更简单的方法:不需要先计算位数,可以直接用取模运算(%)和除法(/)从低位到高位提取每一位数字。