Моя функция найти сумму цифр, равную двойному числу каждого другого введенного числа, не работает в C? - PullRequest
0 голосов
/ 24 июня 2019

Как видно из названия, я пытаюсь найти сумму цифр, умноженных на две другие цифры числа, введенного в функцию. Первая цифра будет второй до последней. Например, ввод 58423 должен вернуть 2 * 2 (4), 8 * 2 (16-> 1 + 6 = 7) -> 4 + 7 = 11. Шахта вообще не работает и, кажется, возвращает случайный номера. Функция ниже.

Я использую тот факт, что n% 10 даст вам самую правую цифру n, а (n / 10)% 10 даст вам следующую правую цифру n, и так далее, где n - введенное число.

int everyOther(long num) //(n / 10) % 10 will get you the next rightmost 
digit
{
    int incrementer = 1;
    int total = 0;
    long shifter = 1;
    int a = 0;
    while(true)
    {
        shifter = shifter *100;
        if(num/shifter == 0) 
        {
            break; // will have reached the end of the number if this is 
//true
        }
        a = 2* ((num / shifter) % 10); // every other digit right to left 
//starting from the second to last, multiplied by two
        total = total + (a/10 + a%10); //sum of the above product's 
//digits
        incrementer++;

    }
    return total;
}

1 Ответ

0 голосов
/ 24 июня 2019

У вас есть две ошибки.

Во-первых, вы хотите делать shifter = 100 * shifter; только один раз за цикл. На каждой итерации вы хотите, чтобы shifter было в 100 раз больше, чем на предыдущей итерации. Так что просто умножьте на 100 один раз. Вы можете избавиться от incrementer. Это избыточно.

Во-вторых, ваш пример показывает добавление цифр 16 для получения 7. Но по какой-то причине вы закомментировали код для этого.

int everyOther (long num)
{
    int shifter = 1; // dividing by 10 gets us the hundreds digit
    int total = 0;
    int a = 0;
    while (num/shifter > 0)
    {

        shifter *= 100; // move two digits over
        if(num/shifter == 0) 
          {
              break;  
          }
        a = 2 * ((num / shifter) % 10);
        total += (a/10 + a%10);

    }
    return total;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...