【问题标题】:Im trying to do Luhn's algorith to check on valid credit cards, but i cant get to sum the numbers我正在尝试使用 Luhn 的算法来检查有效的信用卡,但我无法将数字相加
【发布时间】:2020-06-23 14:20:55
【问题描述】:

我试图用 Luhn 算法用这个信用卡号得到总和:4003600000000014

我得到这个输出: 单数求和:4195600 乘数:0

我正在尝试获得 13 和 7...

感谢一些帮助!

#include <stdio.h>

int main(void)
{
    do
    {
        long card_number = get_long("Write your card's number:");
    } while (card_number < 0);

    // Sum of numbers that wont be multiplied by two
    int non_mult_numbers = card_number;
    while (non_mult_numbers > 0)
    {
        int last_digit = non_mult_numbers % 10;
        int sum_non_mult_numbers = sum_non_mult_numbers + last_digit;
        non_mult_numbers = non_mult_numbers / 100;
    }
    printf("Sum single numbers: %i\n", sum_non_mult_numbers);

    // Sum of numbers that will be multiplied by two and their digits added
    int mult_numbers = card_number;
    mult_numbers = mult_numbers / 10;
    while (mult_numbers > 0)
    {
        last_digit = mult_numbers % 10;
        int digit_times_two = last_digit * 2;
        int add_digits = add_digits + digit_times_two % 10 + digit_times_two / 10;
        mult_numbers = mult_numbers / 100;
    }
    printf("Multiplied numbers: %i\n", add_digits);
}

【问题讨论】:

  • $我的提示:扔掉那个代码,把信用卡号当作一个字符串,然后对这个字符串进行处理。这要简单得多。

标签: c integer long-integer luhn


【解决方案1】:

虽然您的代码无法编译,但我假设您的几个变量的作用域/生命周期有误。

检查 add_digits、sum_non_mult_numbers、card_number。

关注 {} 为内部定义的变量标记范围边界这一事实。

【讨论】:

  • 谢谢!在全局范围内定义我的变量是否更好?
  • 不,变量的范围应始终尽可能大,但尽可能小。关键是,您提供的代码不可能像您所说的那样工作,因此这里没有人可以真正帮助您。只是一个例子:在第 7 行中,您创建了变量 card_number。它的 scpe 在第 8 行结束。您在第 11 行使用它。除了编译错误之外,您如何得到它来产生任何结果?
  • 如果您想确保周围的人可以重现您的结果,您可以使用常见的可访问工具进行检查,例如 onlinegdb.com。通过这种方式,您可以确保每个人都能看到与您相同的行为。
猜你喜欢
  • 2019-03-11
  • 2021-07-21
  • 1970-01-01
  • 2014-12-25
  • 2021-03-13
  • 2013-10-21
  • 2012-02-29
  • 2020-02-28
  • 2023-03-22
相关资源
最近更新 更多