为什么会有运行时错误?我做了很长的一段。
代码:

/*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循环中更改NUMrange1的值,因此如果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;

09-09 23:49
查看更多