在线编译器 C

#include <stdio.h> int main() { int M,a,b,c,REST; scanf("%d",&M); a = M/1000; b = (M%1000)/500; c = (M%500)/100; REST = M - a*1000 - b*500 - c*100; printf(" 1000=%d\n 500=%d\n 100=%d\n REST=%d\n",a,b,c,REST); return 0; }
这段代码的功能是:输入一个金额 M,然后计算用1000元、500元、100元面额的钞票来支付,分别需要多少张,以及剩余无法用这些面额支付的零钱。

代码的逻辑是:先计算1000元钞票的数量,再计算剩余金额中500元钞票的数量,再计算剩余金额中100元钞票的数量,最后剩下的就是零钱。

- 注意变量 `REST` 的命名,它代表剩余零钱,但代码中计算 `REST` 的方式可能和你预期的不同。你检查一下,如果 M 是 1600,那么 `REST` 会是多少?这个结果合理吗?
- 另外,`b` 的计算使用了 `(M%1000)/500`,但这里没有考虑已经取走1000元钞票后的剩余金额。想一想,如果 M 是 1200,`b` 应该等于多少?当前的计算方式是否正确?