Обновление: уже разобрался в чем дело, это функция сложения цифр вместе. Некоторые также указали, что некоторые части этого кода не нужны, поэтому я удалил их, и это определенно помогло! Мне было легче указать на проблему. Спасибо, ребята, цените это. Я пытаюсь понять, что я сделал не так на первом этапе кредитной проблемы в CS50. Я пытаюсь создать программу, реализующую алгоритм Луна. Я уже понял, как складывать все остальные di git, начиная с наименее значимого. Но у меня проблема с умножением каждого другого di git на 2 и сложением цифр продуктов вместе по отдельности. Сначала я решил сделать массив, но сейчас попытался сделать l oop, так как кто-то предположил, что это можно решить с помощью oop. Когда я ввожу номер кредита 4003600000000014, он возвращает значение 24 вместо 13. Я не могу понять логическую ошибку, и я уже несколько часов пытался ее решить. Определенно был бы признателен за вашу помощь!
#include <stdio.h>
#include <cs50.h>
int sum_digits(int number2);
int get_number_digits(long x);
int times_two(int x);
int main(void) {
//Prompt for input
long number = get_long("Card Number: \n");
//initialize number to two different variables for [1. multiplying by
//2, adding the products]
//[2. adding every other digit]
long number2 = number;
long number3 = number;
//Calculate checksum
//Multiply digits by 2 alternately starting from the tens place, then
//add the digit of the products NOTE: edit loop, something is wrong
long remainderr2, currentnumber2, product, initialsum;
currentnumber2 = number3 / 10;
number3 = currentnumber2;
int finalsum = 0;
while (currentnumber2 > 0)
{
number3 = currentnumber2;
remainderr2 = currentnumber2 % 10;
product = times_two(remainderr2);
initialsum = sum_digits(product);
finalsum = finalsum + initialsum;
currentnumber2 = currentnumber2 / 10;
currentnumber2 = currentnumber2 / 10;
}
printf("%ld", finalfinalsum);
}
//Function that adds the digits of a number
int sum_digits(int number2) {
int secondstep, remainderr, currentnumber, sum;
currentnumber = number2;
secondstep = 0;
while (number2 > 0) {
number2 = currentnumber;
sum = 0 + secondstep;
remainderr = currentnumber % 10;
secondstep = sum + remainderr;
currentnumber = number2 / 10;
}
return sum;
}
//Function that multiplies int by 2
int times_two(int x) {
x = x * 2;
return x;
}