Обратное число C с добавлением цифр

#c

#c

Вопрос:

Привет всем, заранее благодарю всех тех, кто пытался ответить или ответить и на часть этого вопроса.

  • Вычислите сумму цифр года.
  • Вычислите абсолютное значение разницы между годом и «обратным» значением года.
  • Вычислите количество четных коэффициентов за день.
  • Вычислите наибольший общий делитель дня, месяца и года.
  • Вычислите количество шагов, необходимых для решения задачи Collatz за месяц

Это мои задачи, которые мне нужно выполнить, как студенту инженерного факультета, вот как далеко я в этом продвинулся. В следующих кодах я ожидаю чего-то подобного

19
90
0
1
0
T M B B

Ответ, который я получаю, таков

Пожалуйста, введите дату вашего рождения (дд мм гггг): 12 11 1981
19
8468304
Нажмите любую клавишу, чтобы продолжить . .
8468304

Как сделать это правильно Я знаю, что мое уравнение правильное или (формула, метод). Однако это то, что я знаю.

 #include<iostream>
#include<cstdlib>
using namespace std;

int main() 
{ 
    cout << "Please enter your birthdate (dd mm yyyy): "; 
    int day, month, year, count,rev;

    int sum = 0;

    cin >> day>> month >>year; 

    while (year!=0)
    {
        int count = year%10;
        sum  =count;
        year /= 10;
    }

    while(year>0)
    {
        rev = year%10;
        year=year/10;
    }

    cout<<sum<<endl;
    cout << rev;
    system ("pause");
    return 0;
}//end main
  

Пожалуйста, помогите!

Комментарии:

1. Какую задачу вы решаете, используя этот код? Попробуйте решить каждую задачу одну за другой.

Ответ №1:

После вашего первого цикла, while (year != 0) вы не сбрасываете значение year, поэтому оно остается равным нулю, а второй цикл вообще не выполняется.

Вам нужно сохранить значение year и использовать его при запуске второго цикла.

Комментарии:

1. Правильно. И, поскольку второй цикл не выполняется, rev ему никогда не присваивается значение, и поэтому он содержит весь мусор, который изначально был в этой памяти. (Второй цикл также неправильный, поскольку rev присваивается одна цифра несколько раз, без какой-либо комбинации).

Ответ №2:

Просто замечание по организации: я бы предложил написать подпрограмму / функцию для каждой задачи, например

 int digit_sum(int year) {
    /* ... */
    return sum;
}

int reverse_difference(int year) {
    /* ... */
    return diff;
}
  

и так далее. Таким образом, вы также предотвратите ошибки, такие как изменение переменной year во время первого вычисления без сохранения исходного значения (что вы и сделали, как уже указал Дэвид Уайнант).