//乘法
#include <limits>
#include<cassert>
using std::abs;
using namespace std;
static int const INT_MAX0= 65535;
static int const INT_MIN0 =-65535;
int Mul(int a,int b,int *iResult)
{
if (a==0||b==0)
{
iResult=0;
return 0;
}
if (a>0&&b>0||a<0&&b<0)
{
if ((INT_MAX0-abs(a)-1)/abs(a)+1<abs(b))
{
if(INT_MAX0/abs(a)==abs(b));
else
{
return 1;
}
}
}
else
{
if((abs(INT_MIN0)-abs(a)-1)/abs(a)+1<abs(b))
{
if (abs(INT_MIN0)/abs(a)==abs(b))
{
}
else
return -1;
}
}
*iResult=a*b;
return 0;
}
//示例程序如下
int main()
{
for (int i=INT_MIN0;i<INT_MAX0;++i)
{
for (int j=INT_MIN0;j<INT_MAX0;++j)
{
int iResult=0;
if (Mul(i,j,&iResult)!=0)
{
assert(i*j>INT_MAX0||i*j<INT_MIN0);
}
else
{
assert(iResult<=INT_MAX0||iResult>=INT_MIN0);
}
}
}
return 0;
}