gpt4 book ai didi

c++ - 仅使用算术运算符获得商与余数

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:45 24 4
gpt4 key购买 nike

我刚开始学习 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,当你用 int 做数学运算,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 的小数部分。

从技术上讲,您只需要一个中间操作即可产生浮点结果。如果第一个操作产生浮点值,所有剩余的操作数将被提升为 float 以匹配这个初始操作数。所以你可以简单地做:

f = 9.0/5 * c + 32;

(9.0 是一个双字面量,就像 9 是一个整型字面量一样。加上小数部分 (.x) 就变成了它变成 double 。如果您编写了 9.0f,那将是一个 float 。)

关于c++ - 仅使用算术运算符获得商与余数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38224595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com