#t158. 找零钱

找零钱

题目描述

一个商品售价为 100100 元。客户支付了一定的金额,请计算应找给客户的零钱金额。

输入一个数表示客户付款金额,输出应找的金额。

输入格式

输入一行,包含一个实数,表示客户支付的金额(单位:元)。

输出格式

输出一行,格式为:

应找您xxx元

其中 xxx 替换为实际应找的金额,结果保留两位小数。

样例输入

150

样例输出

应找您50.00元

数据范围

付款金额 ≥100\ge 100 元(保证足够支付商品价格)。

提示

一、读小数用 %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 试一次。