gpt4 book ai didi

c - 如何在 C 中添加产品数字而不是产品本身?

转载 作者:行者123 更新时间:2023-12-04 15:29:32 25 4
gpt4 key购买 nike

我正在尝试用 C 完成 CS50 类(class)的作业,在该类(class)中我必须实现 Luhn 算法来验证信用卡号。这是一个详细说明的快速示例:


信用卡号:4003600000000014。
现在对于每隔一个数字,从数字的倒数第二个数字开始:

1-0-0-0-0-6-0-4

让我们将每个数字乘以 2:

1•2 + 0•2 + 0•2 + 0•2 + 0•2 + 6•2 + 0•2 + 4•2

这给了我们:

2 + 0 + 0 + 0 + 0 + 12 + 0 + 8

现在让我们将这些产品的数字(即,不是产品本身)加在一起:

2 + 0 + 0 + 0 + 0 + 1 + 2 + 0 + 8 = 13

现在让我们将总和 (13) 添加到未乘以 2 的数字总和(从末尾开始):

13 + 4 + 0 + 0 + 0 + 0 + 0 + 3 + 0 = 20

是的,该和 (20) 的最后一位是 0,因此该数字有效。


我想出了如何分别提取信用卡中的每个数字(我知道我的方法很无聊而且可能不实用),所以下一步是将每个其他数字乘以 2 并相加(乘积的数字,不是数字本身),这就是我需要帮助的方法吗?我的代码:

#include <cs50.h>
#include <stdio.h>
#include <math.h>

int main(void)
{
long credit_card_number;
do
{
credit_card_number = get_long("Enter your credit card number: ");

}
while (credit_card_number < 1 || credit_card_number > 9999999999999999);

//American Express uses 15-digit numbers. American Express numbers start with 34 or 37
//MasterCard uses 16-digit numbers. MasterCard numbers start with 51, 52, 53, 54, or 55.
//Visa uses 13- and 16-digit numbers. Visa numbers start with 4.
// checksum

long last_number;
long credit_card_without_last_number;
long second_to_last_number;
long credit_card_without_second_number;
long third_number;
long credit_card_without_third_number;
long fourth_number;
long credit_card_without_fourth_number;
long fifth_number;
long credit_card_without_fifth_number;
long sixth_number;
long credit_card_without_sixth_number;
long seventh_number;
long credit_card_without_seventh_number;
long eighth_number;
long credit_card_without_eighth_number;
long ninth_number;
long credit_card_without_ninth_number;
long tenth_number;
long credit_card_without_tenth_number;
long eleventh_number;
long credit_card_without_eleventh_number;
long twelfth_number;
long credit_card_without_twelfth_number;
long thirteenth_number;
long credit_card_without_thirteenth_number;
long fourteenth_number;
long credit_card_without_fourteenth_number;
long fifteenth_number;
long credit_card_without_fifteenth_number;
long sixteenth_number;

long multiply_digits;

//separating each number starting from the last (right)in its own variable.
last_number = credit_card_number % 10;
credit_card_without_last_number = credit_card_number / 10;

second_to_last_number = credit_card_without_last_number % 10;
credit_card_without_second_number = credit_card_without_last_number / 10;

third_number = credit_card_without_second_number % 10;
credit_card_without_third_number = credit_card_without_second_number / 10;

fourth_number = credit_card_without_third_number % 10;
credit_card_without_fourth_number = credit_card_without_third_number / 10;

fifth_number = credit_card_without_fourth_number % 10;
credit_card_without_fifth_number = credit_card_without_fourth_number / 10;

sixth_number = credit_card_without_fifth_number % 10;
credit_card_without_sixth_number = credit_card_without_fifth_number / 10;

seventh_number = credit_card_without_sixth_number % 10;
credit_card_without_seventh_number = credit_card_without_sixth_number / 10;

eighth_number = credit_card_without_seventh_number % 10;
credit_card_without_eighth_number = credit_card_without_seventh_number / 10;

ninth_number = credit_card_without_eighth_number % 10;
credit_card_without_ninth_number = credit_card_without_eighth_number / 10;

tenth_number = credit_card_without_ninth_number % 10;
credit_card_without_tenth_number = credit_card_without_ninth_number / 10;

eleventh_number = credit_card_without_tenth_number % 10;
credit_card_without_eleventh_number = credit_card_without_tenth_number / 10;

twelfth_number = credit_card_without_eleventh_number % 10;
credit_card_without_twelfth_number = credit_card_without_eleventh_number / 10;

thirteenth_number = credit_card_without_twelfth_number % 10;
credit_card_without_thirteenth_number = credit_card_without_twelfth_number / 10;

fourteenth_number = credit_card_without_thirteenth_number % 10;
credit_card_without_fourteenth_number = credit_card_without_thirteenth_number / 10;

fifteenth_number = credit_card_without_fourteenth_number % 10;
credit_card_without_fifteenth_number = credit_card_without_fourteenth_number / 10;

sixteenth_number = credit_card_without_fifteenth_number % 10;

//Here I need the help to multiply these numbers by two and then add each product's
//digits to the rest of the unused numbers.
multiply_digits = (second_to_last_number*2)+(fourth_number*2)+(sixth_number*2)+(eighth_number*2)+(tenth_number*2)+(twelfth_number*2)+(fourteenth_number*2)+(sixteenth_number*2);

}

最佳答案

尝试这样做

int main(){
long cNo = 4003600000000014;
int arr[16];

for(int i=0; i<16; i++){
arr[15-i] = cNo % 10;
cNo /= 10;
}

int multipliedSum = 0;
for(int i=0; i<16; i++){
if(i%2==1)
multipliedSum += arr[i];
else{
if(arr[i]*2<10){
multipliedSum += (arr[i]*2);
}else{
int num = arr[i]*2;
while(num){
multipliedSum += num%10;
num/=10;
}
}
}
}

printf("valid = %s\n",multipliedSum%10==0?" True": " False");
}

你会得到以下内容

valid = True

关于c - 如何在 C 中添加产品数字而不是产品本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61505895/

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