为什么会有运行时错误?我做了很长的一段。
代码:
/*VARIABLES FOR WHILE LOOP*/
long long range1 = 9;
int length = 1;
/*FIND NUM'S LENGTH*/
while (NUM > range1)
{
long long range2 = range1 * 10 + 9;
length += 1;
}
错误:
credit.c:25:25:运行时错误:带符号整数溢出:999999999*10不能在类型“int”中表示
最佳答案
代码有两个主要问题,这两个问题都会导致相同的错误:
intlength
变量将增加到达到最大值的点。
这是while循环:
while (NUM > range1)
{
long long range2 = range1 * 10 + 9;
length += 1;
}
问题1
最大的问题是这个while循环永远不会结束。您永远不会在while循环中更改
NUM
或range1
的值,因此如果NUM
开始时大于range1
,您将陷入无限循环。length += 1
将一直被调用,直到length
整数达到允许的最大int值。(可能)问题2
根据您如何解决问题1,您还可以面对以下问题。
如您在上面的评论中所述,
NUM
是一个信用卡号码。信用卡号默认为
16位数长。
和
int
变量的最大值为999999999*最多10位。
如果您的循环设置为运行
NUM
次的值,直到它达到9。如果我们假设选择尽可能低的16位信用卡号码100000000000000,您的循环仍将运行1000000000000000 - 9
次。每次循环运行时,
length
将增加1。循环基本上将尝试将int变量至少增加999999999999999 1倍,这将导致该值大于999999999*10。(可能)修复
你的问题中没有足够的细节来确定这是否能解决你的问题,但我想不是
long long range2 = range1 * 10 + 9;
你可能是想写
range1 = range1 * 10 + 9;