仅使用算术运算符获得余数的商

Obtaining quotient with remainder using just arithmetic operators

本文关键字:余数 运算符      更新时间:2023-10-16

我刚刚开始学习一些C++的基础知识,但我偶然发现了一个问题。

例如,我正在尝试将摄氏度转换为华氏度。

假设,我只有这个固定公式。

F = 9/5(c) + 32

我知道在数学上可以将其分解为

Mathematically : (9c/5) + 32

但是,我将无法通过提醒获得商

那么我究竟如何仅使用算术运算符通过提醒获得两个商,还是不可能

我测试过,但它仍然拒绝给我正确的输出

#include<iostream>
using namespace std;
int main(){
double f;
int c;
cout<<"Enter degree celcius:"<<endl;
cin>>c;
cout<<endl;
f = 9/5 * c + 32; //incorrect ways for obvious reason
f = 9%5 * c + 32; //incorrect ways for obvious reason
cout<<c<<"degree celcius is equals to:"<<f<<endl;
}
f = 9/5 * c + 32; //incorrect ways for obvious reason

如果你知道为什么这是不正确的"明显原因",你就不会问这个问题了!

它实际上是不正确的,因为它使用整数值进行计算。 95c32都是int s,当你用int s进行数学运算时,C++给你的结果是一个int。由于整数是整数,因此它们没有小数部分,并且不能存储余数。

计算完成后,将结果分配给 f ,这是一个double。尽管浮点类型具有可以存储余数的小数部分,但您在此处所做的只是将整数结果转换为浮点值。

您可以将代码视为等效于:

int result = 9/5 * c + 32;
f = static_cast<double>(result);

为了解决这个问题,你需要强制计算作为浮点数完成:

f = 9.0/5.0 * static_cast<double>(c) + 32.0;

这将保留"余数"作为浮点值的小数部分,f

从技术上讲,您只需要单个中间操作即可生成浮点结果。如果第一个操作产生浮点值,则所有剩余的操作数都将提升为浮点数以匹配此初始操作数。因此,您可以简单地执行以下操作:

f = 9.0/5 * c + 32;

9.0是双精度文本,就像9是整数文本一样。添加小数部分(.x)是把它变成双精度的原因。如果你写了9.0f,那将是一个浮动文字。

>文字95都有类型int,所以表达式9/5也会产生一个类型为int的值。 这意味着四舍五入到零,因此产生值1

本质上,要获得预期的结果,您需要使用浮点数。

例如;

 f = 9.0/5.0*c + 32;

9.05.0 都是 double 型,所以除法产生类型 double 的结果(等于 1.8)。 由于1.8double型,c在做乘法之前被提升为double。 乘法的结果是类型 double ,所以32在相加之前也会提升为 double

获取浮点数

9/5 * c + 32

然后,除法的一个值需要是一个浮点文字。 这将导致除法的结果为浮点值,进而使表达式的其余部分成为浮点值。 我们可以通过使用

f = 9.0/5 * c + 32;

添加.0会导致文本成为double,而不是int

您的因子是整数,因此结果将是整数。

与其9/5 * c + 32不如尝试9.0/5.0 * c + 32

您可能还想将 c 声明为双精度。

获取除法运算的商和余数不会帮助您计算摄氏度的华氏当量,但通常商和余数可以这样计算:

int dividend = 123;
int divisor = 5;
int quotient = dividend / divisor;    // integer division
int remainder = dividend % divisor;    // use modulo operation to get remainder
cout << "quotient = " << quotient << ", remainer = " << remainder << endl;
# quotient = 24, remainer = 3

要获得华氏度作为双精度:

double fahrenheit = 9/5.0 * c + 32;    // uses floating point division
使用

5.0 强制使用浮点进行计算。