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_save/10; } i++; } printf("%lld",sum); return 0; }
这段代码试图计算从1到x每个数字的各位数字之和的总和,但逻辑有误。内层循环错误地将整个数字本身重复累加,而不是只累加各位数字。

- 内层循环中,`sum=sum+i_save` 这一行每次循环都会把当前剩余的数字(如123、12、1)都加到sum里,而不是只加个位数。这会导致结果远大于预期。
- 正确的做法应该是在内层循环中只累加当前提取的个位数(即 `i_last`),而不是整个 `i_save`。检查一下你累加的是哪个变量。