#t158. 找零钱
找零钱
题目描述
一个商品售价为 元。客户支付了一定的金额,请计算应找给客户的零钱金额。
输入一个数表示客户付款金额,输出应找的金额。
输入格式
输入一行,包含一个实数,表示客户支付的金额(单位:元)。
输出格式
输出一行,格式为:
应找您xxx元
其中 xxx 替换为实际应找的金额,结果保留两位小数。
样例输入
150
样例输出
应找您50.00元
数据范围
付款金额 元(保证足够支付商品价格)。
提示
一、读小数用 %lf,输出小数用 %f
这是初学者最容易混的一对格式符:
| 场景 | 格式符 | 记忆方法 |
|---|---|---|
scanf 读 double |
%lf |
l 表示 long,输入必须带 l |
printf 输出 double |
%f |
输出不用带 l(带了也能用,但没必要) |
double x;
scanf("%lf", &x); // 读入
printf("%.2f\n", x); // 输出,保留两位
为什么输入必须带 l:scanf 需要区分「读到 float(4 字节)」还是「读到 double(8 字节)」,%f 对应 float,%lf 才是 double。写错会把 8 字节的数据只填 4 字节,后面全乱。
二、变量要先声明
double price; // 先声明
scanf("%lf", &price); // 再读
scanf 不会替你创建变量,&price 里的 price 必须已经声明过。
三、本题的常见坑
-
用了
%d读小数 → 只读进整数部分,后面的小数留在输入里,导致后面全错。 -
输出时用
%d→ 打印出一个莫名其妙的整数。 -
输出忘了
%.2f,默认打印 6 位小数 → 格式不符。 -
付款金额可能是小数,变量用
double,读入格式符和读整数不一样。 -
找零 = 付款 − 售价,一步减法就够,不需要判断。
-
输出是「文字 + 数字 + 文字」,数字位置用
%.2f,其余文字原样写。
自查:拿样例
150 → 应找您50.00元对照,注意.00不能丢;再把输入换成100.5试一次。