防止非整数除法
Prevent non-integer division
我正在写一个Qt应用程序,作为一种爱好,它提示用户使用加、减、乘和除运算符回答基本的算术问题。生成问题,每次正确回答问题时,都会生成新的操作数并使用新的操作符。
在某些情况下,问题可能显示为'4/5'或'3/2',这意味着要输入的答案是非整数值。我设定的一个要求是程序中不能有无理数,也就是说不能有无理数的答案,操作数,运算符等等。
在我的类中,我有一个验证器函数,用于验证生成的每个问题。
void ArQuestion::validate()
{
int answer = getActualAnswer();
if ((pOperand2 % 2 != 0) ||
pOperator == operators::DIVIDE)
{
if (static_cast<int>(answer) != answer)
{
generate();
}
}
}
其中getActualAnswer()
检索问题的实际答案。
不幸的是,我的验证器不起作用,估计static_cast
技巧也不起作用。当我运行这个程序时,仍然有一些问题会问非理性除法问题(产生非理性答案的问题)。我想要验证器做的是以一种方式运行,以防止问题(仅在除法问题下)提出非理性的问题,例如"3/4"或"7/9"。如果这个问题是不合理的,那么它应该产生一个新的问题。
我的问题是:我有什么算法来防止非整数除法问题被问到?
这应该是相当可靠的,
bool quotient_is_integral(double n, double d)
{
double dummy;
return std::modf(n/d, &dummy) == 0.0;
}
您正在寻找的是一种确定除法问题是否返回整数答案的方法,这里有一个小函数可以做到这一点。
#include <iostream>
#include <cmath>
#include <limits>
bool check(double l, double r)
{
double real_answer = l / r;
int target_answer = static_cast<int>(real_answer);
double checked_answer = target_answer;
if(std::fabs(real_answer - checked_answer) > std::numeric_limits<double>::min())
{
std::cout << "Invalid.n";
return false;
}
return true;
}
相关文章:
- 按运行时常量值重复整数除法
- C++整数除法到浮点数
- 可视化整数除法优化 MSVC C++
- 将浮点除法分解为整数和小数部分
- 实现整数除法向上舍入的正确方法是什么?
- C++整数除法给出非常大的数字
- 用于在2个带符号整数区间之间进行除法的C++算法
- 除法函数随机整数需要打印出商和余数
- 将整数除法到整数是否需要强制转换以浮点数或双精度以更精确
- C++ 整数除法
- C++中的整数除法无法按预期工作
- 如何在C++中对大数据整数进行加法、求和、乘法和除法运算
- 只产生整数C++的除法
- 避免使用无符号整数除法
- 实现欧几里得除法,根据两个正整数的线性组合编写这两个正整数的最大公约数
- 大数(长长以上)和单个整数之间的除法
- 截断的整数除法删除
- 整数除法或浮点数乘法
- 不带逻辑运算符的舍入整数除法
- c++编码除法整数