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

#include <stdio.h> int main() { long long int m; int q=0; scanf("%lld", &m); long long int save = m; while (m>0) { m /= 10; q++; } int A[q] = {0}; m =save; while (m>0 ) { int i = 4 ; A[i] = m%10; i--; } for(int i = 0 ; i < q; i++) { printf("%d ",A[i]); } return 0; }
这段代码试图将一个整数按位拆分成数组并输出,但存在几个问题。

代码首先读取一个整数,然后计算它的位数,接着创建对应大小的数组,最后尝试将每一位数字存入数组并打印。

- 在第二个while循环中,变量`i`每次都被重置为4,而不是从0开始或动态调整,这会导致数组元素被反复写入同一个位置,且超出数组范围(当数字位数不等于5时)。
- 数组`A`的大小是`q`,但循环中只使用了固定的索引4,没有根据当前位数正确遍历每一位。

提示:
- 思考如何让索引`i`从数组的最后一个位置开始,随着循环每次减1,而不是每次都重置为固定值。
- 注意数组索引的范围是0到q-1,确保每次存入的位置都在这个范围内。