Способ решения такой проблемы - выяснить, как бы вы это сделали, используя карандаш и бумагу, а затем формализовать это в программу.
Для этой конкретной проблемы это означает на высоком уровне «вычесть дату рождения из текущей даты». Для этого вычитания вы используете вариант того же алгоритма, который вы выучили для вычитания в начальной школе - где вы начинаете с вычитания столбца с более низким значением (в данном случае «дней»), заимствуя при необходимости из столбца следующего более высокого значения , Например, чтобы вычесть 1986-09-15 из 2010-04-10, вы должны сделать:
2010-04-10 -
1986-09-15
----------
10 меньше 15, поэтому вы должны позаимствовать из столбца месяцев. Это означает, что столбец месяцев уменьшается на единицу (до 3), а столбец дней увеличивается на количество дней в месяце 3 (март - 31). Теперь вы можете сделать вычитание столбца дней:
2010-03-41 -
1986-09-15
----------
-26
Теперь мы можем перейти к столбцу месяцев. 3 меньше, чем 9, поэтому мы должны снова занять, на этот раз из года. Возьмите одно в году и добавьте 12 к месяцу (поскольку в году всегда 12 месяцев), затем выполните вычитание:
2009-15-41 -
1986-09-15
----------
-06-26
Теперь мы можем работать по годам - здесь никогда не нужно брать взаймы (если только вы не пытаетесь подсчитать возраст кого-то, кто родился в будущем!):
2009-15-41 -
1986-09-15
----------
23-06-26
Это означает, что разница составляет 23 года, 6 месяцев, 26 дней.
Теперь вы можете работать над превращением этого в программу (подсказка: используйте три отдельные целочисленные переменные для лет, месяцев и дней). Самая хитрая часть - это заимствование из столбца месяцев - вам нужно знать, сколько дней в этом месяце, включая високосные годы для февраля.