что-то не так с моим алгоритмом, что я не могу понять через некоторое время l oop in C. Решение проблемы с кредитом cs50: алгоритм Луна - PullRequest
0 голосов
/ 02 августа 2020

Обновление: уже разобрался в чем дело, это функция сложения цифр вместе. Некоторые также указали, что некоторые части этого кода не нужны, поэтому я удалил их, и это определенно помогло! Мне было легче указать на проблему. Спасибо, ребята, цените это. Я пытаюсь понять, что я сделал не так на первом этапе кредитной проблемы в 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;
}

       
...