[英]Math issue in C++
我正在制作一个代码,你在其中输入两个数字a和b,然后它计算a里面有多少个b,然后它会显示这个数字和剩下的数量。 虽然当a = -2147483648且b = 10时数学错误,我可以找出问题所在,即使使用调试器。谢谢!
#include <iostream>
#include <cmath>
int main() {
int multiple, a, b, rest;
std::cin >> a >> b;
if (a > 0)
{
multiple = floor(a / b);
rest = a - (multiple * b);
}
else
{
multiple = floor((a - b) / b);
rest = (multiple*b - a);
}
std::cout << multiple << " " << rest << std::endl;
}
结果预计-214748365 2结果给出214748363 -18
你期望从程序中给出:( - 16)/ 6 = -3乘以6和+ 2.但它在计算机操作员上不能以这种方式工作。 它只是将16除以6,最后它减去所以我们得到-4。 我对您的代码进行了一些更改,以便为您的目的服务。 我们必须按照你想要的方式制作一个程序。 因此,当a <0时,你的乘法器是负数,我们需要向它添加(-1)。 所以6 *(乘数-1)+ 2 == 6 *( - 2-1)+2 == -16所以:
#include <iostream>
using namespace std;
int main()
{
int multiple, a, b, rest;
std::cin >> a >> b;
if (a > 0)
{
multiple = a / b;
rest = a - (multiple * b);
}
else
{
multiple = a / b - 1;
rest = -(multiple*b - a);
}
std::cout << multiple << " " << rest << std::endl;
return 0;
}
跑:
./a.out
-2147483648
10
-214748365 2
#include <iostream>
#include <cmath>
main (){
double multiple, a, b, rest;
std::cin >> a >> b;
// you have to make sure b not equal zero
if (b != 0){
// when a is bigger then many b's can be inside a
if (a > b){
multiple = floor (a / b);
rest = a - (multiple * b);
}
// when b is bigger then no b's can be inside a
else if (a < b){
multiple = 0;
rest = a;
}
// when a = b then it only one b can be inside a
else{
multiple = 1;
rest = 0;
}
}
std::cout << multiple << " " << rest << std::endl;
它的所有案例都涵盖了计算内部的b数量,你可以尝试%运算符它会更好
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.