下面的程序是为了检查一个数(比如“n”)的素因子是否只限于2、3和5。但是程序给我一个有符号整数溢出运行时错误。有人能帮助我解决这个问题吗?下面是代码:
bool check(int n)
{
if(n<0)
n=n*(-1); // If 'n' is negative, making it positive.
int count=1; //'count' variable to check whether the number is divisible by 2 or 3 or 5.
while(n!=1 && count)
{
count=0;
if(n%2==0)
{
n/=2; count++;
}
else if(n%3==0)
{
n/=3; count++;
}
else if(n%5==0)
{
n/=5; count++;
}
}
if(n==1)
return true;
else return false;
}
程序出现此错误:
运行时错误:有符号整数溢出:-2147483648 * -1无法以型别'int'表示
2条答案
按热度按时间jgwigjjp1#
当然,它不能,你知道为什么吗?一个简单的事实的代表。
假设有4位而不是32位。您将有1位用于符号,3位用于 * 绝对值 *,对吗?
好吧,假设你在第一位有0代表正数,1代表负数。
那么你只能用绝对值来表示
2^3
=8
的组合,对吗?你只有8个正数和8个负数。BUT0被认为是正的,所以你有8个负的,7个正的和1个中性的。所以你有从
-8
到7
的数字。在本例中,您拥有从
-2147483648
到2147483647
的数字。xsuvu9jc2#
如果你的素因子被限制为2、3或5,那么最简单的方法是:
但是如果你的素因子也可以是-1,那么就把它作为一个可接受的有效终止条件。