Online Compiler C

#include <stdio.h> int main() { long long x,sum=0,i=1,i_save=0,i_last=0; scanf("%lld",&x); while(i<=x){ i_save=i; while(i_save>0){ i_last=i_save%10; sum=sum+i_save; i_save=i/10; } i++; } printf("%lld",sum); return 0; }
这段代码试图计算从1到x之间所有数字的各位数字之和,但存在逻辑错误。

- 内层while循环中,`i_save=i/10;` 这一行写错了变量名,应该是 `i_save = i_save / 10;` 才能正确逐位去除数字。当前写法导致内层循环无法正确遍历每一位,并且每次循环都重新从i取值,造成死循环或错误累加。
- 变量`sum`在内层循环中每次累加的是整个`i_save`(即当前剩余的数字),而不是单独的一位数字。应该只累加当前取出的个位数字`i_last`。

- 检查内层循环中变量`i_save`的更新语句,确保每次循环将最后一位去掉。
- 思考在内层循环中应该把哪个值加到`sum`里,是`i_last`还是`i_save`。