在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d",&n); int a=n%10; int b=0; while(n>0){ int last=n%10; b=last; n=n/10; } if(a<=b){ printf("%d %d",a,b); }else{ printf("%d %d",b,a); } return 0; }
这段代码的目的是读取一个整数,然后输出它的第一位和最后一位数字,并按从小到大的顺序排列。但代码中有一个逻辑错误:变量 `b` 在循环中被不断覆盖,循环结束后 `b` 存储的是最后一位数字(即个位),而不是第一位数字。同时 `a` 存储的是个位数字,所以实际上 `a` 和 `b` 都指向同一个数字(个位),导致输出结果不正确。

- 循环结束后,`b` 的值是原数的最后一位(个位),而 `a` 也是原数的最后一位(个位),所以 `a` 和 `b` 总是相等,无法得到第一位数字。
- 要获取第一位数字,需要在循环中保留最后一次循环时的 `last` 值,但当前代码每次循环都直接赋值给 `b`,导致 `b` 最终只保留最后一位。