#t3. 英尺与英寸的转换
英尺与英寸的转换
题目描述
已知英制长度单位与公制单位的换算关系: 英尺(foot) 英寸(inch), 英尺 米。
给定一个以厘米为单位的长度值,请你将其转换为英制长度,输出对应的英尺数和英寸数。
注意: 米 厘米,因此 英尺 厘米。
输入格式
输入一个正整数 ,表示长度值,单位为厘米。
输出格式
输出一行两个整数,分别为英尺数和英寸数,中间用空格分隔。
样例输入
170
样例输出
5 6
(样例解释: 厘米 英尺,取整为 英尺,剩余 英尺 英寸,向下取整为 英寸。)
数据范围
提示
一、把小数变成整数:(int) 强制类型转换
在变量或表达式前面写 (int),就是命令程序「按整数来解释这个值」:
double x = 5.9;
int a = (int)x; // 5
int b = (int)3.99; // 3
int c = (int)(-2.7); // -2 注意不是 -3
规则叫向零截断:不管小数部分是多少,一律丢掉,只保留整数部分。所以 5.9 → 5、-2.7 → -2。它不是四舍五入。
二、和整数除法有什么区别
(int)(7.0 / 2) 和 7 / 2 都得 3,结果一样,但过程不同:
7 / 2:两个 int 相除,本来就是整数除法,小数部分在计算时就被丢掉。(int)(7.0 / 2):先按小数算出 3.5,再截断成 3。
要小心:(int)7.0 / 2 是「先把 7.0 转成 7,再除以 2」,因为 (int) 只作用于紧挨着的那个值。想转换整个表达式,必须加括号:(int)(7.0 / 2)。
三、反向转换:(double)
(double)3 把整数 3 变成小数 3.0,常用来避免整数除法:
int a = 7, b = 2;
printf("%.2f\n", (double)a / b); // 3.50
四、常见错误
-
以为
(int)5.9是 6(那是四舍五入,需要(int)(x + 0.5))。 -
漏括号:
(int)a / b和(int)(a / b)结果可能不同。 -
对负数期待「向下取整」:
(int)(-2.7)是 -2,向下取整才是 -3。 -
这题是上一题的逆过程:已知厘米,要拆成「整英尺 + 剩余英寸」。
-
先算总英尺数(带小数),整数部分就是英尺数;剩下的小数部分再乘 12 得到英寸。
-
取整数部分用上面两种写法之一;英寸同样要取整。
自查:用样例
170 → 5 6核对;若得到5 7,说明某一步做了四舍五入。
相关
在以下作业中: