给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出一个华氏温度。
输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。
输入样例:
150
输出样例:
Celsius = 65
5* 的位置不同,判定节点12的结果就不一样,怎么回事呢?
给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出一个华氏温度。
输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。
输入样例:
150
输出样例:
Celsius = 65
5* 的位置不同,判定节点12的结果就不一样,怎么回事呢?
这与C++的除法特性有关。(顺带一提,看来你在写C,为什么用了.cpp后缀?C和C++早就不再完全兼容了,如果要写C就不要用.cpp后缀。认为无所谓的家伙都是不懂现代C++的,这样的老师很多,不要听他们误导。)
C++的除法行为与参与运算的类型有关。如果是两个整数相除,就会进行向零取整的操作。如果先除以9再做乘法,余数会被抛弃。举例而言,如果F是142,则F-32是110。如果先除以9,得到的是12(即带余除法的整商,注意,不是12.2循环!余数2被舍去了),再乘5是60。如果先乘再除,得到的是550除以9,也就是61(同样,余数1被舍去了)。二者显然是不等价的。
计算机所做的,永远是符合指令顺序的操作,它是不会像人类一样进行简算优化的(有时候编译器会这么做,但C++语法规定你这两个写法不等价,自然也不会做出调整)。
数学中,这种操作相当于给除法结果带个取整函数。乘法的操作数能从取整函数内取出吗?显然不满足(即,int(a*b) != int(a) * b,这个结论的正确性是显然的),因此不能交换位置。