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; if(i_save>0){ i_last=i_save%10; sum=sum+i_save; i_save=i/10; } i++; } printf("%lld",sum); return 0; }
这段代码试图计算从1到x所有数的和,但代码中混入了不必要的数字拆分逻辑,导致结果不正确。

- 变量i_save和i_last被赋值但从未正确使用,它们试图拆分数字的各位,但循环中每次i增加后,i_save被重置为i,然后取个位并累加整个i,接着又用i/10覆盖i_save,这个逻辑是混乱的。
- 实际上,要计算1到x的和,只需要一个累加变量和一个循环变量,不需要拆分数字。你的代码中sum累加了i_save(即i本身),但i_save又被错误地修改,导致累加的值可能不是完整的i。

提示:
- 检查循环内部对i_save的两次赋值:第一次赋值为i,第二次赋值为i/10。第二次赋值会覆盖第一次的值,导致后续循环中i_save不再是原来的i。思考你真正需要累加的是什么值。
- 去掉所有与数字拆分相关的变量(i_save, i_last)和操作,只保留一个循环变量和一个累加变量,看看能否直接得到正确结果。