gpt4 book ai didi

c - 下面的函数对给定的卡号执行 Luhn 算法,但会引发某些卡号的运行时错误。试图理解为什么?

转载 作者:行者123 更新时间:2023-11-30 16:14:22 24 4
gpt4 key购买 nike

我正在运行下面的函数,对任何给定的卡号进行求和检查(卢恩算法),但对某些卡号的检查失败,并且还会引发运行时错误:“索引超出类型 'int[count] 的范围” '。”我猜这是关于数组是奇数/偶数但无法弄清楚的问题。

已经尝试过将循环运行到各种计数,例如 count+1 和 count-1 等。

int sum1 = 0;
int sum2 = 0;
int count = digit_counter(cc_num);
int hold[count];

for(int i=0; i<count; i++)
{
hold[i]= cc_num%10;
cc_num = cc_num/10;
}

for(int i=0; i<count; i++)
{
printf("%i\n",hold[i]);
}

int i,j;
for (i=1,j=0; i<=count || j<count; i+=2,j+=2)
{
hold[i] = hold[i]*2;
if (hold[i]>10)
{
sum1+= (hold[i]/10)+(hold[i]%10);
}
else
{
sum1+= hold[i];
}
sum2+=hold[j];

}
return sum1+sum2;

不应引发任何运行时错误并能够对所有卡执行求和检查。

最佳答案

如前所述,您的循环的停止条件错误。假设您的 cc_num 在没有 Luhn 的情况下保持平移并且您的 digital_counter 工作正常,您可以尝试以下操作:

int i;
for (i=0; i<count; ++i)
{
bool isDouble=(count - i) % 2 != 0;
sum1 += isDouble ? 2 * hold[i] % 10 + 2 * hold[i] / 10 : hold[i];
}
return 9 * sum1 % 10;

关于c - 下面的函数对给定的卡号执行 Luhn 算法,但会引发某些卡号的运行时错误。试图理解为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57738823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com