Модули C и остатки

#c #modulo

#c #modulo

Вопрос:

Эй, мне сложнее всего разобраться, как отобразить этот результат. Допустим, например, я ввожу число, такое как 59. Исходя из этого числа, я получаю оставшийся результат в 1 неделю, 2 дня и 5 часов. Это, конечно, при условии, что одна неделя длится 40 часов, а 1 день — 7 часов, чтобы получить этот результат. Любая помощь в правильном направлении была бы полезна. До сих пор я настраивал это следующим образом:

 scanf("%d %d %d", amp;totalWeeksWorked, amp;totalDaysWorked, amp;totalHoursWorked);
  

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

1. Что scanf предполагается там делать?

2. Я просто проверяю три выходных данных переменной, которые будут отображаться. Есть еще код, я просто хотел показать небольшой фрагмент, извините за то, что он недостаточно понятен.

3. @user520720: Вы имели в виду использовать printf для печати выходных данных, которые будут отображаться?

4. К вашему сведению, но 7-часовые рабочие дни не равняются 40-часовой неделе.

5. @AndreyT: Никогда не приписывайте злому умыслу то, что адекватно объясняется неумелостью.

Ответ №1:

Это не самый быстрый способ, но, пожалуй, наиболее наглядный:

 int numodweeks = input/(7*24);
int numofdays  =input/24;
int numofhours = 24 - (input/24);
  

Использование modulo:

         int numofweeks = input/(7*24);
        int numofdays = (input%numofweeks)/7;
        int numofhours = (input%(numofdays*24));
  

Затем отобразите их так, как вы хотите.

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

1. Сначала я пробовал это, но я пытаюсь найти способ использовать оператор остатка для отображения этого. Я, вероятно, пересмотрю это, как только закончу, и использую ваш метод, описанный выше. Тем не менее, ценю ваш вклад!

2. Обязательно ли использовать этот оператор, или вы просто думаете, что это хороший способ сделать это?

3. Мне нравятся оба способа, но я пытаюсь стать более удобным при использовании этого оператора. Я не очень хорошо знаком с его использованием, и я просто подумал, что было бы лучше использовать его в данном случае. Знаете ли вы способ сделать это?

Ответ №2:

 #include <stdio.h>

int const HOURS_PER_WEEK = 40;
int const HOURS_PER_DAY = 7;

int main() {
  int total_hours = 59;  // this is the input you get

  int remaining = total_hours;  // 'remaining' is scratch space

  int weeks = remaining / HOURS_PER_WEEK;
  remaining %= HOURS_PER_WEEK;

  int days = remaining / HOURS_PER_DAY;
  remaining %= HOURS_PER_DAY;

  int hours = remaining;

  printf("%d hours = %d weeks, %d days, %d hoursn",
         total_hours, weeks, days, hours);

  return 0;
}
  

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

1. Очень приятно! Мне действительно нравится, как вы это структурировали.