【发布时间】:2021-06-06 08:56:13
【问题描述】:
我目前正在使用 Bjarne Stroustrup 的 PPP 学习 C++。有一道练习题:
编写一个程序,提示用户输入两个整数值。 将这些值存储在名为 val1 和 val2 的 int 变量中。写你的 程序来确定更小、更大、和、差、积和 比率并将它们报告给用户。
对于比率,我希望它类似于The ratio of 500 and 700 is 5:7。我知道这个答案可能是
double ratio = 500/700;
但我想将其显示为 5:7 而不是 500/700 = 0.714。
我该怎么做?
编辑:- 我就是这样做的。
#include <iostream>
#include <cmath>
void Ratio(double val1, double val2)
{
double temp1 = val1;
double temp2 = val2;
for(int num = 0; num < 20; num++)
{
if(num == 0 || num == 1)
continue;
if(std::fmod(temp1, num) == 0 && std::fmod(temp1, num) == 0)
{
temp1 /= num;
temp1 /= num;
num = 0;
}
}
std::cout<<"Ratio of " << val1 << " and " << val2 << " is " << val1 << ":" << val2<< std::endl;
}
int main()
{
Ratio(500, 700);
}
我仍然是编程的初学者,这对我来说真的很重要。 任何人都有更好的解决方案。
【问题讨论】:
-
这能回答你的问题吗? Converting floating ratios to int
-
您可以将(整数?)
val1和val2除以gcd以简化表达式。 -
任务要求您输入 integer 值并且您正在使用
double精度 floating 点数,所以我不认为这是有效的。如果您想要一个形式上有效的解决方案,则必须考虑欧几里得算法,但这肯定不是这里的任务。 -
请注意,
double ratio = 500/700;会将双精度ratio设置为0。 -
C++17 起,
std::gcd(500,700) == 100.