【发布时间】:2022-01-15 09:16:16
【问题描述】:
这是一个 Luhn 算法代码,它在在线编译器中运行良好,但是当我在本地 vscode 中使用它时,它只给出 63 作为输出。
我不知道它是否是内存问题,因为它是后期长变量。
即信用卡号作为输入。
#include <stdio.h>
// Finds its Luhn algorithm to see if its a valid credit card number.
void checksum(long num)
{
int sum = 0;
for (int i = 0; num != 0; num /= 10, i++)
{
if (i % 2 == 0)
{
sum = sum + num % 10;
}
else
{
int digit = 2 * (num % 10);
sum = sum + (digit / 10) + (digit % 10);
}
}
printf("%d", sum);
}
int main()
{
long int num;
// Takes credit Card number as input.
do
{
printf("Number: ");
scanf("%li", &num);
} while (num < 0);
checksum(num);
return 0;
}
我的输入类似于374245455400126,378282246310005。
并且输出总是63。
【问题讨论】:
-
欢迎来到 SO。你的输入和预期输出是什么?不同编译器的不同结果通常指向应用程序中未定义的行为。变量未初始化、溢出等
-
您的评论表明您正在处理信用卡号码。这些不是真正的数字,而是数字序列。最好将它们作为字符串处理。根据您的编译器,很容易发生
int和long int都不能存储足够大的值以容纳信用卡号。 -
@Karma0o7 使用 long long int 代替 pf long int。
-
输入存储在 long 类型的“num”变量中,而“sum”最大为 2 位数字,因此它应该可以存储在 int 数据类型中。
-
请不要更改您的代码以显示解决方案。这使得所有 cmets 和答案都毫无用处。如果问题不再存在,这也会使整个帖子对任何未来的访问者都无用。
标签: c integer long-integer function-definition luhn