在线编译器 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]; m =save; int i = 4; while (m>0 ) { A[i] = m%10; i--; } for(int j = 0 ; j < q; j++) { printf("%d ",A[j]); } return 0; }
这段代码试图将一个整数按位存储到数组中并打印出来,但存在几个问题。

代码首先计算数字的位数,然后尝试将每一位数字存入数组,最后打印数组。主要问题在于数组索引的使用方式。

- 你使用 `int i = 4` 作为起始索引,但数组 `A` 的大小是 `q`,而 `q` 是数字的位数。如果数字不是5位数,索引 `4` 就会超出数组范围或导致存储位置错误。你应该根据位数动态决定起始索引,比如从 `q-1` 开始倒着存。

- 在第一个循环中,你修改了 `m` 的值来计算位数,但之后用 `m = save` 恢复。这个思路是对的,但要注意第二个循环中 `m` 再次被修改,而 `i` 的初始值固定为4,这会导致存储位置与位数不匹配。