以uint为例,当计算过程中(比如9999^6)产生大于UINT_MAX(2^32 - 1)的值的时候,编译时会产生integer overflow,即数值溢出,最后的结果也被截断.
1.如何检测 :https://www.quora.com/How-do-I-prevent-integer-overflow-in-C++
2.如何解决:可以使用数组或者字符串模拟,例如使用std::string模拟乘法计算.
string bigmul(string a, string b) {
int size = a.size() + b.size();
char* res = new char[size];
memset(res, a.size() + b.size(), 0);
for (int i = b.size() - 1; i >= 0; i--) {
for (int j = a.size() - 1; j >= 0; j--) {
res[i+j+1] += (b[i] - ‘0‘)* (a[j] - ‘0‘);
res[i+j] += res[i+j+1]/10;
res[i+j+1] = res[i+j+1]%10;
}
}
for (int i = 0; i < size; i++) {
res[i] += ‘0‘;
}
return res[0] == ‘0‘ ? string(res+1) : string(res);
}
c++ detect && solve integer overflow
原文:https://www.cnblogs.com/deepllz/p/11511013.html