#t3. 英尺与英寸的转换

英尺与英寸的转换

题目描述

已知英制长度单位与公制单位的换算关系:11 英尺(foot)=12= 12 英寸(inch),11 英尺 =0.3048= 0.3048 米。

给定一个以厘米为单位的长度值,请你将其转换为英制长度,输出对应的英尺数和英寸数。

注意:11 米 =100= 100 厘米,因此 11 英尺 =30.48= 30.48 厘米。

输入格式

输入一个正整数 nn,表示长度值,单位为厘米。

输出格式

输出一行两个整数,分别为英尺数和英寸数,中间用空格分隔。

样例输入

170

样例输出

5 6

(样例解释:170170 厘米 =170/30.48≈5.577= 170 / 30.48 \approx 5.577 英尺,取整为 55 英尺,剩余 0.5770.577 英尺 ×12≈6.92\times 12 \approx 6.92 英寸,向下取整为 66 英寸。)

数据范围

1≤n≤1051 \le n \le 10^5

提示

一、把小数变成整数:(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,说明某一步做了四舍五入。