2017-09-16 55 views
1

我在输入两个数字a和b,然后计算b中可以有多少个b,然后用剩下的数量显示这个数字。尽管当a = -2147483648和b = 10时,数学运算错误了,但即使使用调试器,我也可以发现问题所在。谢谢!C++中的数学问题

#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; 
} 

结果espected给出-214748365 2 结果214748363 -18

+3

_“...它算错了......”_:你期望得到什么结果,结果是什么得到? –

+1

@ssovukluk OP正在使用'double'这可能是问题,但没有预期/实际我们不能确定。 –

+0

对不起,我刚刚更新了答案 – polmonroig

回答

2

您正在从程序期待得到:(-16)/ 6 = -3次6和+ 2,但是,这是行不通的以这种方式在电脑操作员身上。它只是将16除以6,最后它减去所以我们得到-4。我对你的代码做了一些修改以达到你的目的。我们必须制定一个计划,以您想要的方式提供服务。因此,当你的倍数是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 
+0

您的回答给了我这个:-214748364 ,但我需要这个:-214748365,第二个输出是不同的,这取决于我选择的答案。我找不到这个问题,这很奇怪。 – polmonroig

+0

即将回家。在30分钟之后,我会帮你改写代码以达到教育目的。 – ssovukluk

+0

@polmonroig我按照你想要的方式编辑。 – ssovukluk

1
#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; 

所有病例coverd来计算有多少b可以在a里面,你可以尝试使用%运算符,这会更好

+0

我试过你的代码,但是当它是否定的,它给了我总是0m这是我不想要的东西, b在这种情况下更大,但绝对值不是,因此你的答案是正确的,但它不是我正在寻找的东西,无论如何非常感谢你! – polmonroig

+0

当a为负数时,b在这种情况下会更大,如您所说如果您想根据绝对值进行计算,您可以在if条件之前添加此行 ; a = abs(a); b = abs(b); –

+0

是的你是对的,但我需要增加一个更多:例如a = -32 b = 6;结果将会是-6,因为6 * 5 = 30 + 6 – polmonroig