在线编译器 C

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

代码首先通过除以10来统计数字的位数,这会导致变量m的值变为0。之后试图再次用m来获取每一位数字,但此时m已经是0,所以第二个循环不会执行,数组A中所有元素保持为0。另外,第二个循环中固定使用索引4来赋值,而不是根据位数动态调整,这也会导致数组访问越界或赋值错误。

- 第一个while循环结束后,m的值变为0,导致后续无法再获取原始数字的每一位。你需要保存原始数字的副本,或者重新获取输入。
- 第二个循环中,数组索引i的初始值固定为4,但数组长度q可能不是5,而且i--的位置也不对。你需要根据位数动态确定索引,并正确更新索引值。