2015-02-22 2 views
-5
#include <iostream> 
#include <string.h> 
using namespace std; 

int testMul(int a, int b) 
{ 
    return !a || a * b/a == b; 
} 

int main() 
{ 
    int a, b; 
    while(cin >> a >> b) cout << testMul(a, b) << endl; 
    return 0; 
} 

Когда входСтранная ошибка во время выполнения в C++

-1 -2147483648

, есть во время выполнения error.Divided на 0? Я думаю, что это потрясающе.

Кстати, кто-нибудь заключил способ, который может судить, есть ли переполнение в умножении?

+1

если вы придумали этот ввод, вы уже знаете, в чем проблема. –

ответ

1

Когда вы умножаете -1 и -2147483648, вы получаете подписанное переполнение, что является неопределенным поведением на C++, результатом может быть любой, до вашего компьютера, улавливающего огонь. Таким образом, получение деления на ноль на самом деле не так плохо от результата.

Смежные вопросы