Online Compiler C

#include <stdio.h> int main(){ int num,sum=0,now; scanf("%d",&num); int a[10]={0}; while(num>0){ now=num%10; a[now]++; num=num/10; } int lot=0; while(lot<=10){ sum = sum+a[lot]*lot; lot++; } printf("%d",sum); return 0; }
这段代码的功能是:读入一个整数,统计它每一位数字出现的次数,然后计算每个数字乘以它出现次数的总和并输出。

代码的思路是:用数组 `a` 记录每个数字(0-9)出现的次数,然后遍历数组,把每个数字乘以其出现次数累加到 `sum` 中。

- 第一个循环中,`while(lot<=10)` 会导致数组越界。数组 `a` 的大小是10,有效下标是0到9,但循环条件 `lot<=10` 会让 `lot` 取到10,此时 `a[10]` 是无效访问。
- 第二个循环的终止条件应该改为 `lot < 10`,这样只访问下标0到9。