请教一个问题# PhotoGear - 摄影器材
w*x
1 楼
自己想的解法, 一般不能通过现在的number > 之前的number来判断.
, 如果用int统一处理的话可能不能处理INT_MIN的情况, 因为负数范围比正数大一个.
用unsigned int来处理也不能通过判断现在的比值前的数大来决定是否溢出, 并且
unsigned int自己可能溢出.
溢出判断分两阶段, 一个是在增加新digit前作溢出判断, 这个是判断unsigned int自
己不溢出.
if (uRes > UINT_MAX/10 || (uRes == UINT_MAX/10 && nDigit > (UINT_MAX - (UINT
_MAX/10)*10)))
throw CException("Over flow detected");
在unsigned int自己不溢出的情况下判断是否转换成int后会溢出
//update uRes
uRes = uRes*10 + nDigit;
//uLimit = bNeg ? 0x7FFFFFFF + 1 : 0x7FFFFFFF;
//Overflow situation if uRes isn't overflow
if (uRes > uLimit)
throw CException("Over flow detected");
, 如果用int统一处理的话可能不能处理INT_MIN的情况, 因为负数范围比正数大一个.
用unsigned int来处理也不能通过判断现在的比值前的数大来决定是否溢出, 并且
unsigned int自己可能溢出.
溢出判断分两阶段, 一个是在增加新digit前作溢出判断, 这个是判断unsigned int自
己不溢出.
if (uRes > UINT_MAX/10 || (uRes == UINT_MAX/10 && nDigit > (UINT_MAX - (UINT
_MAX/10)*10)))
throw CException("Over flow detected");
在unsigned int自己不溢出的情况下判断是否转换成int后会溢出
//update uRes
uRes = uRes*10 + nDigit;
//uLimit = bNeg ? 0x7FFFFFFF + 1 : 0x7FFFFFFF;
//Overflow situation if uRes isn't overflow
if (uRes > uLimit)
throw CException("Over flow detected");