Online Compiler C

#include <stdio.h> int main() { int n; scanf("%d",&n); int a[1000]; int length=0; int temp=n; while(temp/10!=0){ length++; temp=temp/10; } temp=n; for(int i=0;i<length;i++){ a[i]=temp%10; temp=temp/10; } int max=a[1],min=a[1]; for(int i=0;i<length;i++){ if(a[i]>max){ max=a[i]; } if(a[i]<min){ min=a[i]; } } int result=max-min; printf("%d",result); return 0; }
1) 这段代码的目的是:读取一个整数,分离其各位数字,找出其中的最大值和最小值,然后计算它们的差并输出。但代码存在逻辑错误,导致无法正确处理所有情况。

2) 提示:
   - 注意 `length` 的计算方式:它统计的是除以10的次数,但数字的位数应该是 `length+1`。当前的循环和数组访问可能遗漏了最高位或最低位。
   - 检查数组 `a` 的赋值循环:它从低位开始赋值,但循环次数是 `length`(而不是总位数),这可能导致最高位数字没有被存储或比较。