我正在制作一个程序,可以自动执行 Luhn 算法;它从第一个信用卡开始,取出信用卡的所有其他号码,将它们乘以二,然后将相乘的数字相加。我还没有完成,但遇到了一个名为“检测到堆栈粉碎”的问题。有人可以提供帮助或建议吗?
这是代码:
#include <stdio.h>
#include <math.h>
int main(void) {
long card;
do
{
printf("Enter the card number: ");
scanf("%li", &card);
}
while (card < 1000000000000000);
int y = 10;
int z = 15;
int x = 1;
int arr[8];
for(int i = 0; i < 8; i++)
{
double result = pow(y,z);
double a = (card / result);
long roundedA = floor(a);
double b = roundedA /10;
long roundedB = floor(b);
long c = roundedB * 10;
int d = roundedA - c;
z = z-2;
arr[x] = d;
x++;
}
int newarr[8];
int arraynumber;
for(int j = 0; j < 7; j++)
{
arraynumber = 2 * arr[j];
newarr[j] = arraynumber;
}
int sum = 0;
for(int k = 0; k < 7; k++)
{
sum = sum + newarr[k];
}
if (sum % 10 == 0)
{
printf("This checks out, boss.");
}
else
{
printf("Security will escort you out of the building big man.");
}
}
我不知道这意味着什么,所以我不知道该尝试什么。
是的,我同意其他人的观点 在 CS50 中,我需要创建一个类似的程序,并将用户输入作为字符串。它要好得多,因为您可以将其视为数组,对其进行迭代并进行 Luhn 算法所需的计算。第一个总和,第二个总和和布尔检查,就是这样 您的问题可能是因为使用了太多的长整型和双精度,堆必须增长太多并“破坏”堆栈 内存布局