Kha*_*dam 6 c integer-overflow cs50
为什么会出现运行时错误?我做了range2
很长很长。
代码:
/*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;
}
Run Code Online (Sandbox Code Playgroud)
错误:
Credit.c:25:25:运行时错误:有符号整数溢出:999999999 * 10 无法以“int”类型表示
您的代码有(两个)主要问题,它们都会导致相同的错误:
intlength
变量被增加到达到最大值的点。
这是你的 while 循环:
while (NUM > range1)
{
long long range2 = range1 * 10 + 9;
length += 1;
}
Run Code Online (Sandbox Code Playgroud)
最大的问题是这个 while 循环永远不会结束。您永远不会更改while 循环中NUM
或的值,因此如果开始时大于,您将陷入无限循环。将继续被调用,直到整数达到允许的最大 int 值。range1
NUM
range1
length += 1
length
根据您解决问题 #1 的方式,您还可能面临以下问题。
正如您在上面的评论中所述,NUM
是信用卡号码。
int
为 999999999 * 10,即最多 10 位数字。如果您的循环设置为运行次数值,NUM
直到达到 9。如果我们选择尽可能低的 16 位信用卡号码 1000000000000000,您的循环仍将运行1000000000000000 - 9
次数。
每次循环运行时,length
都会增加 1。循环基本上会尝试将 int 变量增加至少 999999999999991 次,这将导致该值大于 999999999 * 10。
您的问题中没有足够的详细信息,无法确定这是否能解决您的问题,但我猜测,而不是
long long range2 = range1 * 10 + 9;
Run Code Online (Sandbox Code Playgroud)
你可能想写
range1 = range1 * 10 + 9;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48625 次 |
最近记录: |